Merhabalar,
Aşağıdaki şablon BINANE için vadeli sistemlerde kullanabileceğiniz hem kaldıraç hem de açığa satış ve açığa satış kapama işlemlerini içeren bir örnektir.
Sisteme sadece MOST indikatörünü ve alış satış koşullarınızı eklemeniz yeterlidir.
Lütfen inceleyiniz.
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;
namespace Matriks.Lean.Algotrader
{
public class SablonAcigaSatis : MatriksAlgo
{
[SymbolParameter("FGARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
[Parameter(40)]
public int TOTTPeriod;
[Parameter(1)]
public decimal TOTTOpt;
[Parameter(0.001d)]
public decimal TwinOttCoef;
[Parameter(MovMethod.Variable)]
public MovMethod TottMovMethod;
[Parameter(3)]
public int KaldiracOrani;
TOTT tott;
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (CrossAbove(tott.Mov, tott.OttUp))
{
FX_Alis();
}
if (CrossBelow(tott.Mov, tott.OttDown))
{
FX_Satis();
}
}
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TOTTPeriod, TOTTOpt, TwinOttCoef, TottMovMethod);
// Gerekli
WorkWithPermanentSignal(true);
if (AcigaSatisYapilsin)
{
SendOrderSequential(true, Side.Buy);
SendOrderSequentialForShort(true, Side.All);
}else
{
SendOrderSequential(true, Side.Buy);
}
// #Gerekli
// kaldıraç oranı
SetLeverage(Symbol, KaldiracOrani);
// kaldıraç tipi – true isolated, false cross
SetLeverageType(Symbol, false);
// Gerekli
}
[Parameter(false)]
public bool AcigaSatisYapilsin;
[Parameter(false)]
public bool AksamSeansiniDahilEt;
List<string> orderIDList = new List<string>();
public void FX_Alis()
{
string _orderID = string.Empty; ;
decimal _quantity = 0;
if (LastOrderSide.Obj != Side.Buy)
{
if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
{
_orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = BuyOrderQuantity;
}else
{
if (LastOrderSideForShort.Obj == Side.All)
{
_orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = BuyOrderQuantity;
}else
{
_orderID = SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = BuyOrderQuantity * 2;
}
}
if (_orderID != string.Empty && _quantity != 0)
{
orderIDList.Add(_orderID);
Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSide.Obj = Side.Buy;
LastOrderSideForShort.Obj = Side.Buy;
}
}
}
public void FX_Satis()
{
string _orderID = string.Empty; ;
decimal _quantity = 0;
if (LastOrderSide.Obj != Side.Sell)
{
if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
{
_orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = SellOrderQuantity;
}else
{
if (LastOrderSideForShort.Obj == Side.All)
{
_orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = SellOrderQuantity;
}else
{
_orderID = SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = SellOrderQuantity * 2;
}
}
if (_orderID != string.Empty && _quantity != 0)
{
orderIDList.Add(_orderID);
Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSide.Obj = Side.Sell;
LastOrderSideForShort.Obj = Side.Sell;
}
}
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
// Senntetik emirler tanımlanıyor
// StopLoss(Symbol, SyntheticOrderPriceType.Percent, 1);
// TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 1);
if (!orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)
{
LastOrderSideForShort.Obj = Side.All;
Debug("Sentetik emir tetiklendi");
}
}
}
// #Gerekli
}
}
İyi çalışmalar.