Merhaba,
şablon olarak aşağıdaki stratejiyi inceleyebilirsiniz.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
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;
/*
Bu şablon AcigaSatisYapilsin seçeneği aktif olduğunda Viop ve Binance Future piyasaları için uygun olur.
AcigaSatisYapilsin seçeneği pasif olduğunda istenilen piyasada işlem yapacaktır.
Stratejinin çift yönlü ilerlemesi istendiğinde AcigaSatisYapilsin seçeneğinin aktif edilmesi gerekir ( varsayılan aktif )
Akşam seansında da oluşan sinyallere emir gönderilmesi için AksamSeansiniDahilEt seçeneğinin aktif edilmesi gerekir ( varsayılan pasif )
Kripto piyasası 7/24 açık olduğu için bu seçeneğin aktif ya da pasif seçilmesi birşey değiştirmez.
HangiIslemleBaslasin değişkeni ile stratejinin ilk Long ya da Short pozisyon ile başlaması sağlanabilir.
*** Stratejiye eklenen sentetik emirler tetiklendiğinde pozisyon sıfırlanıp ilk gelecek sinyale göre işleme girecektir.
*/
namespace Matriks.Lean.Algotrader
{
public class SablonAcigaSatisV1 : MatriksAlgo
{
[SymbolParameter("FGARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
[Parameter(5)]
public int MovPeriod;
[Parameter(22)]
public int MovPeriod2;
MOV mov;
MOV mov2;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);
// 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 (CrossAbove(mov, mov2, 0, 0))
{
// Gerekli başla - Açığa satış
FX_Alis(Symbol, BuyOrderQuantity);
// #Gerekli bitti - Açığa satış
}
if (CrossBelow(mov, mov2, 0, 0))
{
// Gerekli başla - Açığa satış
FX_Satis(Symbol, SellOrderQuantity);
// #Gerekli bitti - 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;
SendMarketOrder(sembol, _quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSideForShort = LastOrderSide;
sentetikEmirdenMI = false;
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;
SendMarketOrder(sembol, _quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSideForShort = LastOrderSide;
sentetikEmirdenMI = false;
sonuc = true;
}
return sonuc;
}
bool sentetikEmirdenMI = false;
public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
{
if (sOrder.EnableOrderSending)
{
if (AcigaSatisYapilsin)
{
LastOrderSide.Obj = Side.All;
sentetikEmirdenMI = true;
}
Debug("Sentetik emir tetiklendi");
}
}
// #Gerekli bitti - Açığa satış
}
}