0 beğenilme 0 beğenilmeme
124 kez görüntülendi
Merhaba, aşağıdaki koda (%1.5) izsüren stop ekleyebilir misiniz ? Birde sistem alış yaptığında pozisyonu ya sat sinyaliyle shorta geçirsin ya da %1.5 izsüren stop ile kapatsın, aynı şekilde shorttaykende ya al sinyali ile al a geçirsin ya da %1.5 iz süren stop ile poz kapatsın. Backtesti bu koşullara göre yapmak istiyorum.

 

Kısa sürede dönebilirseniz sevinirim.

 

İyi çalışmalar.

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks.Data.Symbol;

using Matriks.Engines;

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;

using Matriks.Data.Tick;

using Matriks.Enumeration;

using Matriks.IntermediaryInstitutionAnalysis.Enums;

 

//=======================================ACIKLAMA===============================================//

// Bar kapanışı bir önceki barın kapanışının üstünde olan barları sıralı olarak sayar                      //

// (bar bir önceki kapanıştan aşağı kapattığında sıra bozulmaktadır, sayım sıfırlanır)                     //

// bu sayı belirlenen parametreyi geçtiğinde alım yapılır. Aynı şekilde aşağı kapanan barlar da   //

// sayılmaktadır, asagi barlar serisi belirlenen parametreye geldiginde satış yapar.                        //

// Output(cikti parametreleri) eklenmistir.                                                                                        //

 

namespace Matriks.Lean.Algotrader

{

            public class SerialUp_Kopya : 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("GARAN")]

                        public string Symbol;

 

                        [Parameter(SymbolPeriod.Min5)]

                        public SymbolPeriod SymbolPeriod;

 

                        [Parameter(3)]

                        public int ConsecutiveBarsUp;

 

                        [Parameter(3)]

                        public int ConsecutiveBarsDown;

 

                        [Parameter(100)]

                        public decimal BuyOrderQuantity;

 

                        [Parameter(100)]

                        public decimal SellOrderQuantity;

 

                        public int upCounter = 0;

                        public int downCounter = 0;

 

                        [Output]

                        public decimal sonBarKapanisi;

                        [Output]

                        public decimal oncekiBarKapanisi;

                        [Output]

                        public int upcounter;

                        [Output]

                        public int downcounter;

 

                        public override void OnInit()

                        {

                                    AddSymbol(Symbol, SymbolPeriod);

 

                                    // Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.

                                    // true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.

                                    WorkWithPermanentSignal(true);

 

                                    //Eger emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir.

                                    //Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz.

                                    SendOrderSequential(true);

                        }

 

                        /// <summary>

                        /// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir

                        /// </summary>

                        public override void OnInitCompleted()

                        {

 

                        }

 

                        /// <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 voidOnDataUpdate(BarDataEventArgs barData)

                        {

                                    var barDataModel = GetBarData();

 

                                    Debug("DataUpdate");

                                    //Debug("this bar's close: " + barDataModel.Close[barData.BarDataIndex -1] + " last: " + barDataModel.Close[barData.BarDataIndex -2]);

 

                                    if(barDataModel.Close[barData.BarDataIndex -1] > barDataModel.Close[barData.BarDataIndex -2])

                                    {

                                               Debug("this bar's close: " + barDataModel.Close[barData.BarDataIndex -1] + " > last: " + barDataModel.Close[barData.BarDataIndex -2]);

                                               if (downCounter != 0)

                                               {

                                                           downCounter = 0;

                                                           Debug("downCounter reset");

                                               }

                                               upCounter += 1;

                                               Debug("upCounter = " + upCounter);

                                    }

 

                                    if(barDataModel.Close[barData.BarDataIndex -1] < barDataModel.Close[barData.BarDataIndex -2])

                                    {

                                               Debug("this bar's close: " + barDataModel.Close[barData.BarDataIndex -1] + " < last: " + barDataModel.Close[barData.BarDataIndex -2]);

                                               if (upCounter != 0)

                                               {

                                                           upCounter = 0;

                                                           Debug("upCounter reset");

                                               }

                                               downCounter += 1;

                                               Debug("downCounter = " + downCounter);

                                    }

 

                                    if (upCounter >= ConsecutiveBarsUp)

                                    {

                                               SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);

                                               Debug("Alış Emri Gönderildi");

                                    }

 

                                    if (downCounter >= ConsecutiveBarsDown)

                                    {

                                               SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);

                                               Debug("Satış Emri Gönderildi");

                                    }

 

                                    sonBarKapanisi = barDataModel.Close[barData.BarDataIndex -1];

                                    oncekiBarKapanisi = barDataModel.Close[barData.BarDataIndex - 2];

                                    upcounter = upCounter;

                                    downcounter = downCounter;

                        }

 

                        /// <summary>

                        /// Strateji durdurulduğunda bu fonksiyon tetiklenir.

                        /// </summary>

                        public override void OnStopped()

                        {

                        }

            }

}
Algoritmik Trading kategorisinde (14 puan) tarafından | 124 kez görüntülendi

Bu soruya cevap vermek için lütfen giriş yapınız veya kayıt olunuz.

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.



8,630 soru
8,584 cevap
4,819 yorum
19,772 kullanıcı