Merhabalar,
Sisteminizi aşağıdaki gibi düzenledik, kontrol sağlayabilir misiniz ?
***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.AI;
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;
namespace Matriks.Lean.Algotrader
{
public class ShortSottTott2 : MatriksAlgo
{
[SymbolParameter("BTC_USDT_FBIN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(0.003)]
public decimal BuyOrderQuantity;
[Parameter(0.003)]
public decimal SellOrderQuantity;
[Parameter(41)]
public int TottPeriod1;
[Parameter(1.1)]
public decimal TottOpt1;
[Parameter(501)]
public int SottPeriodK1;
[Parameter(201)]
public int SottPeriodSlowK1;
[Parameter(42)]
public int TottPeriod2;
[Parameter(1.2)]
public decimal TottOpt2;
[Parameter(502)]
public int SottPeriodK2;
[Parameter(202)]
public int SottPeriodSlowK2;
[Parameter(43)]
public int TottPeriod3;
[Parameter(1.3)]
public decimal TottOpt3;
[Parameter(503)]
public int SottPeriodK3;
[Parameter(203)]
public int SottPeriodSlowK3;
[Parameter(44)]
public int TottPeriod4;
[Parameter(1.4)]
public decimal TottOpt4;
[Parameter(504)]
public int SottPeriodK4;
[Parameter(204)]
public int SottPeriodSlowK4;
[Parameter(0.0008)]
public decimal TottTwinOttCoef1;
[Parameter(0.35)]
public decimal SottOttOpt1;
[Parameter(0.0008)]
public decimal TottTwinOttCoef2;
[Parameter(0.35)]
public decimal SottOttOpt2;
[Parameter(0.0008)]
public decimal TottTwinOttCoef3;
[Parameter(0.35)]
public decimal SottOttOpt3;
[Parameter(0.0008)]
public decimal TottTwinOttCoef4;
[Parameter(0.35)]
public decimal SottOttOpt4;
[Parameter(30)]
public int OttPeriod1;
[Parameter(7)]
public decimal OttOpt1;
[Parameter(21)]
public int HighlowBarSayisi1;
[Parameter(22)]
public int HighlowBarSayisi2;
[Parameter(23)]
public int HighlowBarSayisi3;
[Parameter(24)]
public int HighlowBarSayisi4;
[Parameter(MovMethod.VAR)]
public MovMethod TottMovMethod1;
[Parameter(MovMethod.VAR)]
public MovMethod TottMovMethod2;
[Parameter(MovMethod.VAR)]
public MovMethod TottMovMethod3;
[Parameter(MovMethod.VAR)]
public MovMethod TottMovMethod4;
[Parameter(2)]
public int SottOttPeriod1;
[Parameter(MovMethod.VAR)]
public MovMethod SottOttMethod1;
[Parameter(MovMethod.VAR)]
public MovMethod SottStosKMethod1;
[Parameter(2)]
public int SottOttPeriod2;
[Parameter(MovMethod.VAR)]
public MovMethod SottOttMethod2;
[Parameter(MovMethod.VAR)]
public MovMethod SottStosKMethod2;
[Parameter(2)]
public int SottOttPeriod3;
[Parameter(MovMethod.VAR)]
public MovMethod SottOttMethod3;
[Parameter(MovMethod.VAR)]
public MovMethod SottStosKMethod3;
[Parameter(2)]
public int SottOttPeriod4;
[Parameter(MovMethod.VAR)]
public MovMethod SottOttMethod4;
[Parameter(MovMethod.VAR)]
public MovMethod SottStosKMethod4;
[Parameter(MovMethod.VAR)]
public MovMethod OttMovMethod1;
[Parameter(true)]
public bool OttSupportLine1;
[Parameter(2.4)]
public decimal ZararDurdurYuzdesi;
TOTT tott;
TOTT tott2;
TOTT tott3;
TOTT tott4;
SOTT sott;
SOTT sott2;
SOTT sott3;
SOTT sott4;
MatriksIndicator HighLow;
MatriksIndicator HighLow2;
MatriksIndicator HighLow3;
MatriksIndicator HighLow4;
OTT ott;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TottPeriod1, TottOpt1, TottTwinOttCoef1, TottMovMethod1);
tott2 = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TottPeriod2, TottOpt2, TottTwinOttCoef2, TottMovMethod2);
tott3 = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TottPeriod3, TottOpt3, TottTwinOttCoef3, TottMovMethod3);
tott4 = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TottPeriod4, TottOpt4, TottTwinOttCoef4, TottMovMethod4);
sott = SOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, SottPeriodK1, SottPeriodSlowK1, SottOttPeriod1, SottOttOpt1, SottOttMethod1, SottStosKMethod1);
sott2 = SOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, SottPeriodK2, SottPeriodSlowK2, SottOttPeriod2, SottOttOpt2, SottOttMethod2, SottStosKMethod2);
sott3 = SOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, SottPeriodK3, SottPeriodSlowK3, SottOttPeriod3, SottOttOpt3, SottOttMethod3, SottStosKMethod3);
sott4 = SOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, SottPeriodK4, SottPeriodSlowK4, SottOttPeriod4, SottOttOpt4, SottOttMethod4, SottStosKMethod4);
HighLow = new HighLow();
HighLow.SetIndicatorParameters("BarSayisi", HighlowBarSayisi1); RegisterUserIndicator(HighLow, Symbol, SymbolPeriod, OHLCType.Close, 5);
HighLow2 = new HighLow();
HighLow2.SetIndicatorParameters("BarSayisi", HighlowBarSayisi2); RegisterUserIndicator(HighLow2, Symbol, SymbolPeriod, OHLCType.Close, 5);
HighLow3 = new HighLow();
HighLow3.SetIndicatorParameters("BarSayisi", HighlowBarSayisi3); RegisterUserIndicator(HighLow3, Symbol, SymbolPeriod, OHLCType.Close, 5);
HighLow4 = new HighLow();
HighLow4.SetIndicatorParameters("BarSayisi", HighlowBarSayisi4); RegisterUserIndicator(HighLow4, Symbol, SymbolPeriod, OHLCType.Close, 5);
ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OttPeriod1, OttOpt1, OttMovMethod1, OttSupportLine1);
WorkWithPermanentSignal(true);
SendOrderSequential(true, HangiIslemleBaslasin);
SendOrderSequentialForShort(true, Side.All);
SetLeverage(Symbol, Kaldirac);
SetLeverageType(Symbol, true);
SetTimerInterval(1);
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
var barData1 = GetBarData(Symbol, SymbolPeriod);
var ohlcData1 = GetSelectedValueFromBarData(barData1, OHLCType.Low);
var ohlcData2 = GetSelectedValueFromBarData(barData1, OHLCType.High);
if (ott.Value[1][ott.CurrentIndex] < ott.Value[0][ott.CurrentIndex] && tott.Value[0][tott.CurrentIndex] < tott.Value[2][tott.CurrentIndex] && sott.Value[0][sott.CurrentIndex] < sott.Value[1][sott.CurrentIndex] && HighLow.Value[1][HighLow.CurrentIndex - 1] > ohlcData1)
{
FX_Satis(Symbol, BuyOrderQuantity);
}
if (ott.Value[1][ott.CurrentIndex] > ott.Value[0][ott.CurrentIndex] && tott2.Value[0][tott2.CurrentIndex] < tott2.Value[2][tott2.CurrentIndex] && sott2.Value[0][sott2.CurrentIndex] < sott2.Value[1][sott2.CurrentIndex] && HighLow2.Value[1][HighLow2.CurrentIndex - 1] > ohlcData1)
{
FX_Satis(Symbol, SellOrderQuantity);
}
if (ott.Value[1][ott.CurrentIndex] < ott.Value[0][ott.CurrentIndex] && tott3.Value[0][tott3.CurrentIndex] > tott3.Value[1][tott3.CurrentIndex] && sott3.Value[0][sott3.CurrentIndex] > sott3.Value[1][sott3.CurrentIndex] && HighLow3.Value[0][HighLow3.CurrentIndex - 1] < ohlcData2)
{
FX_Alis(Symbol, SellOrderQuantity);
}
if (ott.Value[1][ott.CurrentIndex] > ott.Value[0][ott.CurrentIndex] && tott4.Value[0][tott4.CurrentIndex] > tott4.Value[1][tott4.CurrentIndex] && sott4.Value[0][sott4.CurrentIndex] > sott4.Value[1][sott4.CurrentIndex] && HighLow4.Value[0][HighLow4.CurrentIndex - 1] < ohlcData2)
{
FX_Alis(Symbol, SellOrderQuantity);
}
}
[Parameter(3)]
public int Kaldirac;
[Parameter(true)]
public bool AcigaSatisYapilsin;
[Parameter(false)]
public bool AksamSeansiniDahilEt;
[Parameter(Side.All)]
public Side HangiIslemleBaslasin;
public void FX_Alis(string Symbol, decimal quantity)
{
if (LastOrderSide.Obj != Side.Buy)
{
var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin || sentetikEmirdenMI) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2; SendMarketOrder(Symbol, _quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSideForShort = LastOrderSide;
sentetikEmirdenMI = false;
}
}
public void FX_Satis(string Symbol, decimal quantity)
{
if (LastOrderSide.Obj != Side.Sell)
{
var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin || sentetikEmirdenMI) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2; SendMarketOrder(Symbol, _quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSideForShort = LastOrderSide;
sentetikEmirdenMI = false;
StopLoss(Symbol, SyntheticOrderPriceType.Percent, ZararDurdurYuzdesi);
}
}
bool sentetikEmirdenMI = false;
public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
{
if (sOrder.EnableOrderSending)
{
if (AcigaSatisYapilsin)
{
LastOrderSide.Obj = Side.All;
sentetikEmirdenMI = true;
} Debug("Sentetik emir tetiklendi");
}
}
public class OrderListTimestamp
{
public string ID;
public string Symbol;
public decimal Adet;
public decimal Fiyat;
public OrdType EmirTipi;
public OrderSide orderSide;
public string EmirYonu;
public DateTime TetiklenmeZamani;
public int Sayac;
public bool AktifMI;
}
Dictionary<string, OrderListTimestamp> timestampDict = new Dictionary<string, OrderListTimestamp>();
[Parameter(3)]
public int AyniEmirKacSeferGonderilsin;
[Parameter(10)]
public int KacSaniyeSonraTekrarGonderilsin;
string orderIDTimestamp = string.Empty;
public override void OnTimer()
{
var tutt = timestampDict.Where(x => x.Value.AktifMI == true && DateTime.Now >= x.Value.TetiklenmeZamani);
if (tutt.Count() >0)
{
foreach (var deger in tutt)
{
LastOrderSide.Obj = deger.Value.orderSide == OrderSide.Buy? Side.Sell:Side.Buy;
if (deger.Value.EmirTipi.Obj == OrdType.Limit)
{
orderIDTimestamp = SendLimitOrder(deger.Value.Symbol, deger.Value.Adet, deger.Value.orderSide, deger.Value.Fiyat);
Debug(deger.Value.EmirYonu + " emri tekrar gönderildi.");
}
else if (deger.Value.EmirTipi.Obj == OrdType.Market)
{
orderIDTimestamp = SendMarketOrder(deger.Value.Symbol, deger.Value.Adet, deger.Value.orderSide);
Debug(deger.Value.EmirYonu + " emri tekrar gönderildi.");
}
deger.Value.ID = orderIDTimestamp;
deger.Value.AktifMI = false;
timestampDict[orderIDTimestamp] = deger.Value;
timestampDict.Remove(deger.Key);
}
}
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
if (timestampDict.ContainsKey(order.CliOrdID))
{
timestampDict.Remove(order.CliOrdID);
Debug("Timestamp h