0 beğenilme 0 beğenilmeme
323 kez görüntülendi

Değerli Matriks İQ Destek Ekibi ve kıdemli kullanıcılar;

(Önemli rica: Mümkünse bu soruya yazı ile değil, kısa ve eğitici bir video ile yanıt verin. Algoritma kurgusu, matriks iq, c# hakkındaki önemli noktalara dikkat çekerek nereye nasıl kod yazacağımı ve sisteme nasıl hakim olabileceğimi de paylaşabilirseniz sevinirim.)

Öncelikle Anıl Hoca'nın kodlarını Matriks İQ kütüphanesinde kullanıma sunduğunuz için emeği geçen herkese teşekkür ederim. Öğrenmek için çok iyi bir kaynak. Yaklaşık 1.5 yıldır algoritmik trading ile mesai harcamaya çalışıyorum. Çok kısıtlı olan eğitimlere Anıl Özekşi, Kıvanç Özbilgiç in youtube ve Borfin'deki eğitimlerini bir kaç defa ( her videolarını ) izledikten sonra sevgili Recep Toğaçer (

) ve çok değerli Özkan Aksular (
) ın yarım kalmış Matriks İQ da yazım rehberinden öğrenmeye çalışıyorum. Prime da başlayan algoritmik trading serüvenim İQ da devam edecek çünkü gelecek İQ da.

FirsatciTrend-4Bölge-Çift-Yön 4 bölgeli bir sistemde (x 2) olarak alım-satım yapan değil de farklı koşullarda çalışan long ve short robotları kurgulamak istiyorum. Ancak olduramadım :) 

Deneme yanılma ile öğrenmek için saatler hatta günler süren 200-300 adet backtest yaparak kodları denedikten sonra kalıcı bir öğrenme çözümü bulmaya çalışıyorum.

Anıl hoca'nın çok sevdiğim ve saygı duyduğum sözü:" Size balık vermem ama balık tutmayı öğretirim" !!! Bu arada son kullanıcı olarak öğrenebildiklerim çerçevesinde yorumum; sevgili Anıl hoca ve Kıvanç hoca bizlere sadece balık tutma malzemelerini öğretti !!! Bu malzemeler her ne kadar çok kıymetli olsa da, balık tutabilmek için o malzemeleri ne zaman, nasıl, niçin kullanabileceğimi ve malzeme verimi düştüğünde ne yapacağımı öğretmediler...  Bu yüzden Recep ve Özkan beyin linklerini özellikle paylaştım ki gelecekte belki Matriks İQ bünyesinde daha verimli paylaşımlar oluşturabilirler...

Lütfen birileri şu balığı tutmayı öğretmeye yardımcı olsun.

Short Robotun:

Majör Trend OTT(100,1) 

ott.Value[1][ott.CurrentIndex] < ott.Value[0][ott.CurrentIndex] koşulu sağlandığında short robotu devreye girsin.

minör TOTT(30, 0.6,0.0001) MOV aşağıda olduğunda 

Açığa satış yapmak istiyorum.

Kod içerisindeki mantıksal kurguyu bir daha inceleyip düzelttiğimde de long robot işlemleri devre dışı kaldı ve tamamen short ağırlıklı olarak işlem yapar hale geldi...

Long Robot alım yapıyor son işlemde ancak, short kapatamıyor ve yükelişi kaçırıyor bu sefer.

işte ben bunları birleştirmek istiyorum

Kodumun son hali aşağıdaki gibi:

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks;

using Matriks.Data.Symbol;

using Matriks.Engines;

using Matriks.Indicators;

using Matriks.Symbols;

using Matriks.Trader.Core;

using Matriks.Trader.Core.Fields;

using Matriks.Lean.Algotrader.AlgoBase;

using Matriks.Lean.Algotrader.Models;

using Matriks.Lean.Algotrader.Trading;

using Matriks.AI;

using Matriks.AI.AiParameters;

using Matriks.AI.Data;

using Matriks.Trader.Core.TraderModels;

 

namespace Matriks.Lean.Algotrader

{

public class V2FirsatciTrend4BolgeCiftYon : MatriksAlgo

{

/// <summary>

/// Strateji LONG ve SHORT işlem yapmaktadır. 

/// Açığa satış parametresi seçildiğinde ilk emir belirlenen lot kadar gönderilir ikinci emir ve sonraki emirler 2x olarak gönderilir.

/// örn. 1 lot ile ilk emir gönderilirse sonraki emirler 2 olarak gönderilir.

/// Strateji  BIST - VIOP - BINANCE (timestamp kontrollü) için uygundur.

/// ZamanKullanilsinMI parametresi EVET seçildiğinde zamana göre çalışır. Hayır seçildiğinde zamandan bağımsız olrak çalışır.

/// MAJOR trend parametresi bir kez girilmektedir.

/// kaldıraç,AyniEmirKacSeferGonderilsin ve KacSaniyeSonraTekrarGonderilsin parametreleri sadece strateji Binance'de çalıştırıldığında geçerlidir.

/// 

/// Parametre Girişleri 4 bölge olarak girilmektedir.

/// 

/// _________________________________/ LONG \________________________________________1.BÖLGE

 

//if(MOV(C,15,VAR)>OTT(C,15,7),

//MOV(C,25,VAR)>OTT(C,25,0.6)*(1+0.025) 

//AND STOSK(300,150,33,VAR)+1000>OTT(STOSK(300,150,33,VAR)+1000,2,0.4) 

//AND H>OTT(HHV(H,16/2),2,0.4) 

//AND H>REF(HHV(H,16),-1),

/// _________________________________________________________________________________2.BÖLGE

//MOV(C,15,VAR)>(OTT(C,15,3)+REF(OTT(C,15,3)-(OTT(C,15,7)-OTT(C,15,3)),-100))/2 AND 

//MOV(C,15,VAR)>OTT(C,15,0.6)*(1+0.0006) 

//AND STOSK(150,150,33,VAR)+1000>OTT(STOSK(150,150,33,VAR)+1000,2,0.3) 

//AND H>OTT(HHV(H,22/2),2,0.4) AND H>REF(HHV(H,22),-1)) 

/// ____________________________/ LONG KAPAMA \_______________________________________3.BÖLGE

 

//if(MOV(C,15,VAR)>OTT(C,15,7),

//MOV(C,30,VAR)<OTT(C,30,0.6)*(1-0.025) 

//AND STOSK(250,150,33,VAR)+1000<OTT(STOSK(250,150,33,VAR)+1000,2,0.2) 

//AND L<OTT(LLV(L,46/2),2,0.4) 

//AND L<REF(LLV(L,46),-1),

/// __________________________________________________________________________________4.BÖLGE

//MOV(C,15,VAR)<OTT(C,15,0.6)*(1-0.0008) 

//AND STOSK(150,150,33,VAR)+1000<OTT(STOSK(150,150,33,VAR)+1000,2,0.4)

//AND L<OTT(LLV(L,46/2),2,0.4) AND L<REF(LLV(L,46),-1)) 

 

/// </summary>

 

[SymbolParameter("GUBRF")]

public string Symbol1;

[Parameter(SymbolPeriod.Min)]

public SymbolPeriod SymbolPeriod1;

/// _________________________________/ LONG \________________________________________1.BÖLGE

 

// if(MOV(C,20,VAR)>OTT(C,20,7),

 

[Parameter(15)]

public int MajorTrend_OttPeriod;

[Parameter(3)]

public decimal MajorTrend_OttOPT;

 

//MOV(C,40,VAR)>OTT(C,40,0.6)*(1+0.0004) 

 

[Parameter(25)]

public int MinorTrend_TottPeriod;

[Parameter(0.6)]

public decimal MinorTrend_TottOPT;

[Parameter(0.025)]

public decimal MinorTrend_TottTwinOttCoef;

 

 

 

//AND STOSK(300,200,33,VAR)+1000>OTT(STOSK(300,200,33,VAR)+1000,2,0.4)

[Parameter(300)]

public int MinorTrend_SottPeriodK;

 

[Parameter(150)]

public int MinorTrend_SottPeriodSlowK;

[Parameter(2)]

public int MinorTrend_SottOttPeriod;

[Parameter(0.4)]

public decimal MinorTrend_SottOttOPT;

 

 

//AND H>OTT(HHV(H,16/2),2,0.4) 

 

[Parameter(16)] // buraya yazılan periyot kod içerisinde 2 ye bölünür.  -->  16/2 

public int MinorTrend_HHV;

[Parameter(2)]

public int MinorTrend_HOttPeriod;

[Parameter(0.4)]

public decimal MinorTrend_HOttOpt;

 

//AND H>REF(HHV(H,16),-1),

 

[Parameter(16)]

public int MinorTrend_REFHHV;

 

/// ______________________________________/ Fırsatçı Trend \___________________________________________2.BÖLGE

 

//MOV(C,20,VAR)>(OTT(C,20,3)+REF(OTT(C,20,3)-(OTT(C,20,7)-OTT(C,20,3)),-100))/2 

 

[Parameter(15)]

public int FirsatciTrend_OttPeriod;

[Parameter(3)]

public decimal FirsatciTrend_OttOpt;

 

//AND MOV(C,20,VAR)>OTT(C,20,0.6)*(1+0.0006)

 

[Parameter(20)]

public int MinorTrend2_TottPeriod;

[Parameter(0.6)]

public decimal MinorTrend2_TottOpt;

[Parameter(0.0006)]

public decimal MinorTrend2_TottTwinOttCoef;

 

 

//AND STOSK(200,200,33,VAR)+1000>OTT(STOSK(200,200,33,VAR)+1000,2,0.3)

 

[Parameter(200)]

public int MinorTrend2_SottPeriodK;

[Parameter(200)]

public int MinorTrend2_SottPeriodSlowK;

[Parameter(2)]

public int MinorTrend2_SottOttPeriod;

[Parameter(0.3)]

public decimal MinorTrend2_SottOttOpt;

 

 

//AND H>OTT(HHV(H,22/2),2,0.4) 

 

 

[Parameter(22)]

public int MinorTrend2_HHV;

[Parameter(2)]

public int MinorTrend2_HOttPeriod;

[Parameter(0.4)]

public decimal MinorTrend2_HOttOpt;

 

//AND H>REF(HHV(H,22),-1)) 

 

[Parameter(22)]

public int MinorTrend2_REFHHV;

 

///

/// ____________________________/ LONG KAPAMA \_______________________________________3.BÖLGE

 

// MOV(C,30,VAR)<OTT(C,30,0.6)*(1-0.0004) 

 

[Parameter(30)]

public int MinorTrend3_TottPeriod;

[Parameter(0.6)]

public decimal MinorTrend3_TottOpt;

[Parameter(0.0004)]

public decimal MinorTrend3_TottTwinOttCoef;

 

 

//AND STOSK(250,200,33,VAR)+1000<OTT(STOSK(250,200,33,VAR)+1000,2,0.2)

 

[Parameter(250)]

public int MinorTrend3_SottPeriodK;

 

[Parameter(200)]

public int MinorTrend3_SottPeriodSlowK;

 

[Parameter(2)]

public int MinorTrend3_SottOttPeriod;

 

[Parameter(0.2)]

public decimal MinorTrend3_SottOttOpt;

 

 

 

//AND L<OTT(LLV(L,46/2),2,0.4) 

 

[Parameter(46)]

public int MinorTrend3_LLV;

 

[Parameter(2)]

public int MinorTrend3_LOttPeriod;

 

[Parameter(0.4)]

public decimal MinorTrend3_LOttOpt;

 

// AND L<REF(LLV(L,46),-1),

 

[Parameter(46)]

public int MinorTrend3_REFLLV;

/// __________________________________________________________________________________4.BÖLGE

 

//MOV(C,20,VAR)<OTT(C,20,0.6)*(1-0.0008) 

 

[Parameter(20)]

public int MinorTrend4_TottPeriod;

[Parameter(0.6)]

public decimal MinorTrend4_TottOpt;

[Parameter(0.0008)]

public decimal MinorTrend4_TottTwinOttCoef;

 

//AND STOSK(200,200,33,VAR)+1000<OTT(STOSK(200,200,33,VAR)+1000,2,0.4)

 

[Parameter(200)]

public int MinorTrend4_SottPeriodK;

 

[Parameter(200)]

public int MinorTrend4_SottPeriodSlowK;

 

[Parameter(2)]

public int MinorTrend4_SottOttPeriod;

 

[Parameter(0.4)]

public decimal MinorTrend4_SottOttOpt;

 

 

//AND L&

Murat Kocayanak
Algoritmik Trading kategorisinde (38 puan) tarafından | 323 kez görüntülendi
0 0
Cevabı başkalarının da işine yarayabilir: Akif Emre Şanver'e ve Kripexe katkısı için teşekkür ederim...

 

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks.Data.Symbol;

using Matriks.Engines;

using Matriks.Indicators;

using Matriks.Symbols;

using Matriks.Trader.Core;

using Matriks.Trader.Core.Fields;

using Matriks.Lean.Algotrader.AlgoBase;

using Matriks.Lean.Algotrader.Models;

using Matriks.Lean.Algotrader.Trading;

/*

 

Bu şablondaki açığa satış yapısı Viop ve Futures piyasalarına uygundur.

 

Stratejinin çift yönlü ilerlemesi istendiğinde AcigaSatisYapilsin seçeneğinin aktif edilmesi gerekir ( varsayılan aktif )

 

Akşam seansında da oluşan sinyallerle emir gönderilmesi için AksamSeansiniDahilEt seçeneğinin aktif edilmesi gerekir ( varsayılan pasif )

Kripto piyasası 7/24 açık olduğu için bu seçeneğin aktif ya da pasif seçilmesi birşey değiştirmez.

 

*** Stratejiye eklenen sentetik emirler tetiklendiğinde pozisyon sıfırlanıp ilk gelecek sinyale göre işleme girecektir.

 

*/

 

namespace Matriks.Lean.Algotrader

{

public class SablonK4_Kopya : MatriksAlgo

{

[SymbolParameter("GARAN")]

public string Symbol;

 

[Parameter(SymbolPeriod.Min5)]

public SymbolPeriod SymbolPeriod;

 

[Parameter(5)]

public decimal BuyOrderQuantity;

 

[Parameter(5)]

public decimal SellOrderQuantity;

 

[RestoreLastValueOnResume]

[Parameter(0)]

public decimal stock;

 

OTT ott;

 

MOST most;

 

public override void OnInit()

{

AddSymbol(Symbol, SymbolPeriod);

most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 3, 2, MovMethod.Exponential);

ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 2, 1.4m, MovMethod.VAR, true);

 

// Gerekli açığa satış

WorkWithPermanentSignal(true);

SendOrderSequential(true, Side.Buy);

SendOrderSequentialForShort(true, Side.Sell);

// #Gerekli açığa satış

}

 

public override void OnDataUpdate(BarDataEventArgs barData)

{

if (CrossAbove(most, most, 1, 0))

{

FX_Al(Symbol, BuyOrderQuantity);

}

 

if (CrossBelow(most, most, 1, 0))

{

FX_Sat(Symbol, SellOrderQuantity);

}

 

if (CrossBelow(ott, ott, 1, 0))

{

FX_AcigaSatis(Symbol, SellOrderQuantity);

}

 

if (CrossAbove(ott, ott, 1, 0))

{

FX_AcikPozisyonKapat(Symbol, BuyOrderQuantity);

}

}

 

// Gerekli açığa satış

[Parameter(true)]

public bool AcigaSatisYapilsin;

 

[Parameter(false)]

public bool AksamSeansiniDahilEt;

 

public bool FX_Al(string sembol, decimal adet)

{

bool sonuc = false;

if (LastOrderSide.Obj != Side.Buy && LastOrderSideForShort.Obj != Side.Sell)

{

LastOrderSide.Obj = Side.All;

 

SendMarketOrder(sembol, adet, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

Debug("Al [ " + adet + " adet ]");

stock = stock + BuyOrderQuantity;

Debug("FX_AL " + stock + " long açıldı");

sonuc = true;

}

return sonuc;

}

 

public bool FX_Sat(string sembol, decimal adet)

{

bool sonuc = false;

if (LastOrderSide.Obj != Side.Sell && LastOrderSideForShort.Obj != Side.Sell)

{

LastOrderSide.Obj = Side.All;

 

SendMarketOrder(sembol, adet, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

Debug("Sat [ " + adet + " adet ]");

stock = stock - SellOrderQuantity;

Debug("FX_SAT " + stock + " Long kapandı");

sonuc = true;

}

return sonuc;

}

 

public bool FX_AcigaSatis(string sembol, decimal adet)

{

bool sonuc = false;

if (LastOrderSideForShort.Obj != Side.Sell && LastOrderSide.Obj != Side.Buy && AcigaSatisYapilsin)

{

LastOrderSide.Obj = Side.All;

 

SendMarketOrder(sembol, adet, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

Debug("Açığa Sat[ " + adet + " adet ]");

LastOrderSideForShort.Obj = Side.Sell;

 

stock = stock - SellOrderQuantity;

Debug("FX_AcigaSatis " + stock + " Short açıldı");

sonuc = true;

}

return sonuc;

}

 

public bool FX_AcikPozisyonKapat(string sembol, decimal adet)

{

bool sonuc = false;

if (LastOrderSideForShort.Obj != Side.Buy && LastOrderSide.Obj != Side.Buy && AcigaSatisYapilsin)

{

LastOrderSide.Obj = Side.All;

 

SendMarketOrder(sembol, adet, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

Debug("Açık Poz. Kapat [ " + adet + " adet ]");

LastOrderSideForShort.Obj = Side.Buy;

LastOrderSide.Obj = Side.Sell;

 

stock = stock + BuyOrderQuantity;

Debug("FX_AcigaPozisyonKapat " + stock + " Short kapandı");

sonuc = true;

}

return sonuc;

}

 

public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)

{

if (sOrder.EnableOrderSending)

{

if (AcigaSatisYapilsin)

{

SendOrderSequential(true, Side.Buy);

SendOrderSequentialForShort(true, Side.Sell);

}

 

Debug("Sentetik emir tetiklendi");

}

}

// #Gerekli açığa satış

}

}

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,639 soru
8,593 cevap
4,826 yorum
19,838 kullanıcı