Merhablaar,Attığım kod satırında fx alis ve fx satış ondataupdate de bir problem var mı acaba bakar mısıınz aptallıktan başka hiçbirşey yapmıyor.

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks;

using Matriks.Data.Symbol;

using Matriks.Data.Tick;

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;

using Matriks.Enumeration;

using Matriks.IntermediaryInstitutionAnalysis.Enums;

using Newtonsoft.Json;

 

namespace Matriks.Lean.Algotrader

{

public class SMA_DENEME01 : 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("AAVE_USDT_FBIN")]

public string Symbol;

 

 

[Parameter(SymbolPeriod.Min15)]

public SymbolPeriod SymbolPeriod1;

 

 

[Parameter(Side.Buy)]

public Side orderSide;

 

 

[Parameter(22)]

public int EmaPeriod1;

 

[Parameter(5)]

public int SmaPeriod1;

 

[Parameter(3)]

public decimal Stop_zarar;

 

[Parameter(4)]

public decimal Stop_kar;

 

[Parameter(20)]

public int KaldiracOrani;

 

 

[Parameter(true)]

public bool AcigaSatisYapilsin;

 

[Parameter(false)]

public bool AksamSeansiniDahilEt;

 

List<string> orderIDList = new List<string>();

 

string orderID;

 

[Parameter(1)]

public decimal BuyOrderQuantity;

 

[Parameter(1)]

public decimal SellOrderQuantity;

 

EMA ema;

SMA sma;

 

 

 

public override void OnInit()

{

 

ema = EMAIndicator(Symbol, SymbolPeriod1, OHLCType.Close, EmaPeriod1);

sma = SMAIndicator(Symbol, SymbolPeriod1, OHLCType.Close, SmaPeriod1);

 

 

SendOrderSequential(true, orderSide);

WorkWithPermanentSignal(true);

if (AcigaSatisYapilsin)

{

SendOrderSequential(true, Side.All);

SendOrderSequentialForShort(true, Side.All);

}else

{

SendOrderSequential(true, orderSide);

}

SetLeverage(Symbol, KaldiracOrani);

SetLeverageType(Symbol, 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 OnInitCompleted()

{

}

 

/// <summary>

/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.

/// </summary>

public override void OnTimer()

{

 

}

 

/// <summary>

/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.

/// </summary>

/// <param name="newsId">Gelen haberin id'si</param>

/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>

public override void OnNewsReceived(int newsId, List<string> relatedSymbols)

{

 

}

 

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

{

if (CrossAbove(sma, ema, 0, 0))

{

FX_Alis();

StopLoss(Symbol, SyntheticOrderPriceType.Percent, Stop_zarar);

TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Stop_kar);

}

if (CrossBelow(sma, ema, 0, 0))

{

FX_Satis();

StopLoss(Symbol, SyntheticOrderPriceType.Percent, Stop_zarar);

TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Stop_kar);

}

 

}

 

public override void OnInitComplated()

{

FX_PiyasaTipi();

}

public void FX_Alis()

{

if (LastOrderSide.Obj != Side.Buy)

{

if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)

{

orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

StopLoss(Symbol, SyntheticOrderPriceType.Percent, Stop_zarar);

TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Stop_kar);

Debug("Alış emri gönderildi.[ " + BuyOrderQuantity + " adet ]");

}else

{

if (piyasaTipleri == PiyasaTipleri.BISTPP)

{

// Açık pozisyonu kapat

orderID = SendMarketCloseShortOrder(Symbol, BuyOrderQuantity);

orderIDList.Add(orderID);

Debug("Açık pozisyonlar kapatıldı.[ " + BuyOrderQuantity + " adet ]");

 

// Al

orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

Debug("Alış emri gönderildi.[ " + BuyOrderQuantity + " adet ]");

}else

{

// pozsiyon kapat ve al

orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

StopLoss(Symbol, SyntheticOrderPriceType.Percent, Stop_zarar);

TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Stop_kar);

Debug("Alış emri gönderildi.[ " + (BuyOrderQuantity) + " adet ]");

}

}

LastOrderSide.Obj = Side.Buy;

}

}

public void FX_Satis()

{

if (LastOrderSide.Obj != Side.Sell)

{

if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)

{

if (piyasaTipleri == PiyasaTipleri.BISTPP)

{

if (AcigaSatisYapilsin)

{

orderID = SendShortSaleMarketOrder(Symbol, SellOrderQuantity);

orderIDList.Add(orderID);

Debug("Açığa satış yapıldı.[ " + (SellOrderQuantity) + " adet ]");

}else

{

orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

Debug("Satış emri gönderildi.[ " + (SellOrderQuantity) + " adet ]");

}

}else

{

orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

Debug("Satış emri gönderildi.[ " + (SellOrderQuantity) + " adet ]");

}

 

}else

{

if (piyasaTipleri == PiyasaTipleri.BISTPP)

{

orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

Debug("Satış emri gönderildi.[ " + (SellOrderQuantity) + " adet ]");

 

orderID = SendShortSaleMarketOrder(Symbol, SellOrderQuantity);

orderIDList.Add(orderID);

Debug("Açığa satış yapıldı.[ " + (SellOrderQuantity) + " adet ]");

}else

{

orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

Debug("Satış emri gönderildi.[ " + (SellOrderQuantity * 2) + " adet ]");

}

}

LastOrderSide.Obj = Side.Sell;

}

}

[Output]

public string Sembol1 = "";

 

[Output]

public string Sembol2 = "";

 

enum PiyasaTipleri

{

BISTPP,

BISTVIOP,

KRIPTOBINANCE,

KRIPTOBINANCEFUTURE,

KRIPTOBITMEX,

KRIPTOBTCTURK

}

PiyasaTipleri piyasaTipleri = PiyasaTipleri.BISTPP;

 

public void FX_PiyasaTipi()

{

Sembol1 = Symbol;

Sembol2 = Symbol;

 

var SymbolDetail = GetSymbolDetail(Symbol);

 

if (SymbolDetail.ExchangeDetail.ExchangeCode == PiyasaTipleri.BISTPP.ToString())

{

piyasaTipleri = PiyasaTipleri.BISTPP;

}else if (SymbolDetail.ExchangeDetail.ExchangeCode == PiyasaTipleri.BISTVIOP.ToString())

{

piyasaTipleri = PiyasaTipleri.BISTVIOP;

}else if (SymbolDetail.ExchangeDetail.ExchangeCode == "")

{

Sembol1 = Symbol.Split('_')[0];

Sembol2 = Symbol.Split('_')[1];

 

var _split = Symbol.Split('_');

 

if (_split.Count() == 3)

{

if (Symbol.Split('_')[2].Contains("BIN"))

{

piyasaTipleri = PiyasaTipleri.KRIPTOBINANCE;

} else if (Symbol.Split('_')[2].Contains("FBIN"))

{

piyasaTipleri = PiyasaTipleri.KRIPTOBINANCEFUTURE;

Sembol1 = Symbol;

Sembol2 = Symbol;

 

}else if (Symbol.Split('_')[2].Contains("BMEX"))

{

piyasaTipleri = PiyasaTipleri.KRIPTOBITMEX;

}

}else

{

piyasaTipleri = PiyasaTipleri.KRIPTOBTCTURK;

}

 

}

}

 

/// <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 && !orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)

{

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

{

StopLoss(Symbol, SyntheticOrderPriceType.Percent, Stop_zarar);

TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Stop_kar);

}

 

if (order.Side.Obj == Side.Buy)

{

Debug("Sentetik emir tetiklendi ");

LastOrderSide.Obj = Side.Sell;

 

orderID = SendMarketOrder(Symbol, order.OrderQty, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

LastOrderSide.Obj = Side.Buy;

 

Debug("Sentetik emrin kalan kısmı için alış emri gönderildi.[ " + order.OrderQty + " adet ]");

 

}else

{

Debug("Sentetik emir tetiklendi ");

LastOrderSide.Obj = Side.Buy;

 

if (piyasaTipleri == PiyasaTipleri.BISTPP)

{

orderID = SendShortSaleMarketOrder(Symbol, order.OrderQty);

orderIDList.Add(orderID);

}else

{

orderID = SendMarketOrder(Symbol, order.OrderQty, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

orderIDList.Add(orderID);

}

LastOrderSide.Obj = Side.Sell;

 

Debug("Sentetik emrin kalan kısmı için satış emri gönderildi.[ " + order.OrderQty + " adet ]");

}

}

}

 

/// <summary>

/// Strateji durdurulduğunda bu fonksiyon tetiklenir.

/// </summary>

public override void OnStopped()

{

}

}

}