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.