0 beğenilme 0 beğenilmeme
130 kez görüntülendi
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;

using Matriks.Data.Tick;

using Matriks.Enumeration;

using Matriks.IntermediaryInstitutionAnalysis.Enums;

using Newtonsoft.Json;

 

namespace Matriks.Lean.Algotrader

{

public class Osm_Kopya3 : MatriksAlgo

{

 

[SymbolParameter("SOL_USDT_FBIN")]

public string Symbol;

 

[Parameter(SymbolPeriod.Min)]

public SymbolPeriod SymbolPeriod;

 

[Parameter(1)]

public int BuyOrderCount;

 

[Parameter(1)]

public int SellOrderCount;

 

[Parameter(1)]

public decimal StopLevel1;

 

[Parameter(0.5)]

public decimal StopLevel2;

 

[Parameter(8)]

public int STperiod;

 

[Parameter(1)]

public decimal Coeff;

 

SuperTrend superTrend;

 

MatriksIndicator IFTCCIKripex;

 

// DEĞİŞKEN TANIMLAMALARI

public int LongRobot = 0;

 

public int ShortRobot = 0;

 

 

 

public override void OnInit()

{

// İNDİKATÖR TANIMLARI

 

IFTCCIKripex = new IFTCCIKripex();

IFTCCIKripex.SetIndicatorParameters("MovPeriod", 9);

IFTCCIKripex.SetIndicatorParameters("CciPeriod", 5);

 

RegisterUserIndicator(IFTCCIKripex, Symbol, SymbolPeriod, OHLCType.Close, 5);

 

superTrend = SuperTrendIndicator(Symbol, SymbolPeriod, STperiod, Coeff);

 

 

 

AddSymbol(Symbol, SymbolPeriod);

SendOrderSequential(true);

WorkWithPermanentSignal(true);

}

 

public override void OnInitCompleted()

{

 

}

 

 

public override void OnDataUpdate(BarDataEventArgs barData)

{

var barData1 = GetBarData(Symbol, SymbolPeriod);

 

// LONG ROBOTU İÇİN İF KOŞULU

 

if (CrossBelow(superTrend, barData1, OHLCType.Close, 0) && CrossAbove(IFTCCIKripex, -0.5m, 0) && LongRobot == 0 && ShortRobot == 0)

{

Debug(" Alış Emri Gönderiliyor = " + " Long Robot Değeri = " + LongRobot);

SendMarketOrder(Symbol, BuyOrderCount, OrderSide.Buy);

LongRobot = 1;

Debug(" Alış Emri Gönderildi = " + " Long Robot Değeri = " + LongRobot);

 

 

 

}

 

// LONG İŞLEM KAPATMA KOŞULU

 

if (LongRobot == 1 && ShortRobot == 0)

{

Debug(" Long Kapama İşlemi Gerçekleşiyor = " + " Long Robot Değeri = " + LongRobot + " Short Robot Değeri = " + ShortRobot);

TakeProfit(Symbol, SyntheticOrderPriceType.Percent, StopLevel1);

StopLoss(Symbol, SyntheticOrderPriceType.Percent, StopLevel2);

LongRobot = 0;

Debug(" Long Kapama İşlemi Gerçekleşti = " + " Long Robot Değeri = " + LongRobot + " Short Robot Değeri = " + ShortRobot);

 

}

 

 

 

// SHORT ROBOTU İÇİN İF KOŞULU

 

if (CrossAbove(superTrend, barData1, OHLCType.Close, 0) && CrossBelow(IFTCCIKripex, 0.5m, 0) && LongRobot == 0 && ShortRobot == 0)

{

Debug(" Satış Emri Gönderiliyor = " + " Short Robot Değeri = " + ShortRobot);

 

SendMarketOrder(Symbol, SellOrderCount, OrderSide.Sell);

 

ShortRobot = 1;

 

Debug(" Satış Emri Gönderildi = " + " Short Robot Değeri = " + ShortRobot);

 

 

 

}

 

// SHORT İŞLEM KAPATMA KOŞULU

 

if (ShortRobot == 1 && LongRobot == 0)

{

Debug(" Short Kapama İşlemi Gerçekleşiyor = " + " Short Robot Değeri = " + ShortRobot + " Long Robot Değeri = " + LongRobot);

TakeProfit(Symbol, SyntheticOrderPriceType.Percent, StopLevel1);

StopLoss(Symbol, SyntheticOrderPriceType.Percent, StopLevel2);

ShortRobot = 0;

Debug(" Short Kapama İşlemi Gerçekleşti = " + " Short Robot Değeri = " + ShortRobot + " Long Robot Değeri = " + LongRobot);

 

}

 

}

 

public override void OnOrderUpdate(IOrder order)

{

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

{

 

}

}

 

 

public override void OnStopped()

{

}

}

}

 

 

 

 

İyi günler. Paylaştığım stratejiyi kendim yazdım. Supertrend ve inverse fisher cci indikatörlerini kullanarak long ve short işlemi yapan bir sistem yazmak istiyorum. Bu sistemin hareketlerini de debug ile kontrol ediyorum. Sistem de debug sekmesini kontrol ettiğim de long işlem açıldığında LongRobot değerimi 1 olarak atıyorum ama , long işlemin açıldığı dakika da long kapama kısmında yazdığım debug yazıları long işlemin girdiği dakika da aktif oluyor ve LongRobot değişkenimi sıfır olarak atıyor. Bunu engellemek için nasıl bir koşul oluşturabilirim.

İkinci bir sorunum ise long işlem açıldığımda take profit ve stoploss koşulları oluşmadan sistem short giriş kalıbını kullanarak sat emri veriyor. Bu sat emrinden kaçınmak neler yapmalıyım?

 

Benim burada oluşturmaya çalıştığım koşul Long işleme girdiğinde sat koşulları oluşsa bile, sat emri vermeden Takeprofit veya Stoploss ile işlemi kapamak ve sonrasında Short işlem açıldığında al koşulları oluşsa bile short işlemi TakeProfit veya Stoploss ile kapatmasını sağlamak istiyorum. Yardımcı olursanız çok sevinirim. İyi günler iyi çalışmalar dilerim.
Algoritmik Trading kategorisinde (18 puan) tarafından | 130 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,
İncelemeniz için örnek bir şablon iletiyoruz. Aşağıdaki bağlantıdan ulaşabilirsiniz.
https://destek.matriksdata.com/?qa=blob&qa_blobid=564593710787780746

Öncelikli olarak backtest yapıp debug fonksiyonundaki çıktılara göz atınız.
Kod tarafında sentetik emir kullanılıyor. Burada yapmanız gereken kontroller vardır. Sentetik emir iletimi başarılı olduğunda, "OnSyntheticOrderTriggered" fonksiyonundan işlem yönünü sıfırlayıp, koşulların tersi yönüne girmesini sağlamanız gerekir. 

İyi çalışmalar dileriz.
 

(3,341 puan) tarafından
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,709 soru
8,655 cevap
4,853 yorum
20,260 kullanıcı