1 beğenilme 0 beğenilmeme
1,847 kez görüntülendi
Selamlar,

Anıl hocamızın yeni paylaştığı OTT bantlarını içeren yeni OTT yi MatriksİQ içinde kodlarını yazabilme şansınız varmı? hem indikatör olarak hemde algoritmik trade de kullanmak ve backtest yapmak için

 

Teşekkürler
Algoritmik Trading kategorisinde (200 puan) tarafından | 1,847 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme
En İyi Cevap

Seçkin Durgay
(4,631 puan) tarafından
tarafından seçilmiş
0 0
Seçkin Bey merhaba,

Bir hafta önce benzerini rica etmiştim cevap gelmedi.

Bu kodlamayı viopta kullanmak için 1/-1 kodu ve yükselen trend ile düşen trentte farklı al-sat yaptığı kodlamayı ekleyip paylaşabilir misiniz. Mümkünse tabii.

Teşekkürler ilginiz için.
2 0

Merhaba Sinan bey,

Aşağıdaki kodu alıp inceleyiniz lütfen.

DİKKAT: Stratejilerin nasıl çalıştığından tamamen emin olmadan, gerçek hesapta kullanmayınız.

 

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;

 

namespace Matriks.Lean.Algotrader

{

public class OTTV2Strateji : 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_XU0300221")]

public string Symbol;

[Parameter(SymbolPeriod.Min5)]

public SymbolPeriod SymbolPeriod;

 

[Parameter(10)]

public decimal BuyOrderQuantity;

[Parameter(10)]

public decimal SellOrderQuantity;

 

[Parameter(40)]

public int X1;

[Parameter(1)]

public decimal X2;

[Parameter(0.001d)]

public decimal X3;

 

[Parameter(MovMethod.VAR)]

public MovMethod MovMethod;

 

// indikator tanımları.

OTT ott;

 

MOV mov;

 

/// <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()

{

mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, X1, MovMethod);

ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, X1, X2, MovMethod, true);

 

AddSymbol(Symbol, SymbolPeriod);

 

//Eger backtestte 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 OnInitComplated()

{

 

}

 

int FirstRun = 0;

/// <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)

{

decimal l1, l2, l3;

l1 = mov.CurrentValue;

l2 = ott.CurrentValue * (1 + X3);

l3 = ott.CurrentValue * (1 - X3);

 

if (CrossAbove(mov, l2))

{

Debug("Alış emri gonderildi.");

if (FirstRun == 0)

{

SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));

Debug("Alış emri gonderildi.");

FirstRun = 1;

}

else

{

SendMarketOrder(Symbol, BuyOrderQuantity * 2, (OrderSide.Buy));

Debug("Alış emri gonderildi.");

}

}

if (CrossBelow(mov, l3))

{

Debug("Alış emri gonderildi.");

if (FirstRun == 0)

{

SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));

Debug("Satış emri gonderildi.");

FirstRun = 1;

}

else

{

SendMarketOrder(Symbol, SellOrderQuantity * 2, (OrderSide.Sell));

Debug("Satış emri gonderildi.");

}

}

}

 

/// <summary>

/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.

/// </summary>

/// <param name="barData">Emrin son durumu</param>

public override void OnOrderUpdate(IOrder order)

{

if (order.OrdStatus.Obj == OrdStatus.Filled)

{

 

}

}

}

}

 

0 0
Merhaba,

Bu kod stok hisse senetlerinde (normal BIST) AL - SAT // AÇIĞA SAT - AÇIĞI KAPAT işlemlerini yapıyor mu?

Eğer öyle ise Backtest sonuçlarında "açığa satış" ve "açık kapatma" gibi ibareler görmemiz gerekmez mi?

Eğer öyle değilse, bu kodlara AÇIĞA SAT - AÇIK KAPAT opsiyonlarını da eklemeniz mümkün mü?

 

Teşekkürler...
0 0
Merhaba,

Yukarıda verilen strateji Matriks IQ'ya eklediğimiz TOTT indikatörünün stratejisidir. Hazır stratejiler içerisinde TOTTStratejisi içerisinde aynı işlemi yapan kod bulunmakta.

Bu stratejide açığa satış/kapat emirleri bulunmamakta. Fakat Algoritma Sihirbazı ile çok basit bir şekilde bu emirleri kullanarak strateji oluşturabilirsiniz. Eğer istediğiniz sonuçları alamazsanız tekrar yardımcı olabiliriz.

İyi çalışmalar
8,714 soru
8,661 cevap
4,853 yorum
20,348 kullanıcı