0 beğenilme 0 beğenilmeme
556 kez görüntülendi
Merhabalar,

Viop tarafında saat 18.10dan sonra gümüş ve altına emir gönderemiyorum. Emirlerim direk reddediliyor. Algoritmam ile emir göndermem için yapmam gereken ayar nedir? Çünkü elle emir gönderebiliyorum.

 

Teşekkürler
Algoritmik Trading kategorisinde (23 puan) tarafından | 556 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme
Merhaba.

Akşam seansında piyasa emirleri red edilir.

Kodun içindeki emir gönderim kısımlarında değişiklik yapmanız gerekir.

Aşağıdaki örnek akşam seansına kadar piyasa akşam seansından sonra tavan, tabandan emir göndermekte.

Strateji adının AksamSeansiDahil olmasına dikkat ediniz.

İyi çalışmalar

***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;

/*
            Strateji gündüz seansında piyasa emir gönderirken,
            Akşam seansında taban tavandan emir gönderiyor.
*/

namespace Matriks.Lean.Algotrader
{
            public class AksamSeansiDahil : MatriksAlgo
            {
                        // Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
                        // "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.

                        [SymbolParameter("F_XU0301020")]
                        public string Symbol;

                        [Parameter(SymbolPeriod.Min)]
                        public SymbolPeriod SymbolPeriod;

                        [Parameter(1)]
                        public decimal Adet;

                        // Zamanlama
                        TimeSpan baslangic;
                        TimeSpan bitis;

                        public decimal tavan, taban;

                        /// <summary>
                        /// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
                        /// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
                        /// </summary>
                        public override void OnInit()
                        {
                                   AddSymbol(Symbol, SymbolPeriod);
                                   AddSymbolMarketData(Symbol);

                                   // Akşam seasının başlama saati
                                   baslangic = new TimeSpan(19, 0, 0);
                                   bitis = new TimeSpan(23, 00, 0);

                                   SendOrderSequential(true);
                                   WorkWithPermanentSignal(true);
                        }

                        public void FxAlis()
                        {
                                   tavan = GetMarketData(Symbol, SymbolUpdateField.LimitUp);
                                   SendLimitOrder(Symbol, Adet, OrderSide.Buy, tavan, includeAfterSession:true);
                                   Debug("Tavan fiyattan alış emri gönderildi.");
                        }

                        public void FxSatis()
                        {
                                   taban = GetMarketData(Symbol, SymbolUpdateField.LimitDown);
                                   SendLimitOrder(Symbol, Adet, OrderSide.Sell, taban, includeAfterSession:true);
                                   Debug("Taban fiyattan satış emri gönderildi.");
                        }

                        /// <summary>
                        /// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.
                        /// </summary>
                        /// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
                        public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
                        {
                                   // bardata verileri çağırılıyor.
                                   var barData = GetBarData();

                                   // Aktif barın open ve close değerleri alınıyor.
                                   var Open = barDataCurrentValues.LastUpdate.Open;
                                   var Close = barDataCurrentValues.LastUpdate.Close;

                                   // ref fonksiyonu ile 2 önceki close değeri alınıyor.
                                   var ClosePrev2 = Ref(barData, OHLCType.Close, 2);

                                   // OnDataUpdate() tetiklendiğindeki saat
                                   TimeSpan sistemSaati = DateTime.Now.TimeOfDay;
                                   tavan = GetMarketData(Symbol, SymbolUpdateField.LimitUp);
                                   taban = GetMarketData(Symbol, SymbolUpdateField.LimitDown);

                                   Debug("tavan: " + tavan + " taban: " + taban);

                                   // Akşam seansına kadar piyasa emir gönder
                                   if (sistemSaati<baslangic)
                                   {
                                               // Alış şartı - son barda kapanış açılıştan büyük ve kapanış 2 bar önceki kapanıştan büyük ise
                                               if (Close>Open && Close>ClosePrev2)
                                               {
                                                           SendMarketOrder(Symbol, Adet, OrderSide.Buy);
                                                           Debug("Alış emri gönderildi.");
                                               }

                                               // Satış şartı - son barda açılış kapanıştan büyük ve kapanış 2 bar önceki kapanıştan düşük ise
                                               if (Close<Open && Close<ClosePrev2)
                                               {
                                                           SendMarketOrder(Symbol, Adet, OrderSide.Sell);
                                                           Debug("Satış emri gönderildi.");
                                               }
                                   }else if (sistemSaati >= baslangic && sistemSaati <= bitis)
                                   {
                                               // Alış şartı - son barda kapanış açılıştan büyük ve kapanış 2 bar önceki kapanıştan büyük ise
                                               if (Close>Open && Close>ClosePrev2)
                                               {
                                                           FxAlis();
                                               }

                                               // Satış şartı - son barda açılış kapanıştan büyük ve kapanış 2 bar önceki kapanıştan düşük ise
                                               if (Close<Open && Close<ClosePrev2)
                                               {
                                                           FxSatis();
                                               }

                                   }

                        }

            }
}
(12,830 puan) tarafından
0 0
Altin ve gumuste saat 23 e kadar piyasa emri gonderebiliyorum aslinda aksam seansi olmuyor. Ogrenmek istedigim bunu kodla yapmak. Red yememesi icin iptale kadar gecerli olarak yapmam gerekiyor bunu nasil yapabilirim?
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



7,586 soru
7,592 cevap
4,435 yorum
10,412 kullanıcı