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 TOTTSTRATEJISICIFTSEMBOL : 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("FGARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[SymbolParameter("GARAN")]
public string OrderSymbol1;
[Parameter(40)]
public int TOTTPeriod;
[Parameter(1)]
public decimal TOTTOpt;
[Parameter(0.001d)]
public decimal TwinOttCoef;
[Parameter(MovMethod.Variable)]
public MovMethod TottMovMethod;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
// indikator tanımları.
TOTT tott;
/// <summary>
/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
/// </summary>
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
AddSymbol(OrderSymbol1, SymbolPeriod);
tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TOTTPeriod, TOTTOpt, TwinOttCoef, TottMovMethod);
// Gerekli başla - Açığa satış
WorkWithPermanentSignal(true);
SendOrderSequential(true, HangiIslemleBaslasin);
SendOrderSequentialForShort(true, Side.All);
// #Gerekli bitti - Açığa satış
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (barData.SymbolId.Equals(GetSymbolId(Symbol)))
{
if (CrossAbove(tott.Mov, tott.OttUp))
{
// Gerekli açığa satış
FX_Alis(OrderSymbol1, BuyOrderQuantity);
// #Gerekli açığa satış
}
if (CrossBelow(tott.Mov, tott.OttDown))
{
// Gerekli açığa satış
FX_Satis(OrderSymbol1, SellOrderQuantity);
// #Gerekli açığa satış
}
}
}
// Gerekli başla - Açığa satış
[Parameter(true)]
public bool AcigaSatisYapilsin;
[Parameter(false)]
public bool AksamSeansiniDahilEt;
[Parameter(Side.All)]
public Side HangiIslemleBaslasin;
public bool FX_Alis(string sembol, decimal quantity)
{
bool sonuc = false;
if (LastOrderSide.Obj != Side.Buy)
{
var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2;
SendPLMOrder(OrderSymbol1, _quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSideForShort = LastOrderSide;
sonuc = true;
}
return sonuc;
}
public bool FX_Satis(string sembol, decimal quantity)
{
bool sonuc = false;
if (LastOrderSide.Obj != Side.Sell)
{
var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2;
SendPLMOrder(OrderSymbol1, _quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSideForShort = LastOrderSide;
sonuc = true;
}
return sonuc;
}
public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
{
if (sOrder.EnableOrderSending)
{
Debug("Sentetik emir tetiklendi");
if (AcigaSatisYapilsin)
LastOrderSide.Obj = Side.All;
}
}
// #Gerekli bitti - Açığa satış
}
}
Merhabalar. Tott stratejisinin düzenlenmiş bir halini kullanıyorum. Tott stratejisini bir enstrümanda çalıştırıp başka bir enstrümana emri göndertiyorum. Bu stratejiye bakiyeye göre al-sat işlevi kazandırmak istiyorum. Algo kütüphanesinden bakiyeye göre al-sat stratejisini inceleyip yapmaya çalıştım ama başarılı olamadım. Stratejiyi aşağıya bırakıyorum. Yardımcı olabilirseniz çok sevinirim.

