Stratejilerde açığa satiş ve açık pozisyonun kapatılması için bu yapı kullanılabilir.
Bu yapı ilk işlemi X lot ile başlar sonraki işlemleri 2X lot olarak devam eder.
HangiIslemleBaslasin değişkeni ile stratejinin ilk hangi yönde işleme girmesi seçilebilir.
AksamSeansiniDahilEt değişkeni ile stratejinin akşam seansında da çalışması sağlanabilir.
Bu yapıyı diğer stratejilerinize entegre etmek için şablondaki // Gerekli açığa satış ile başlayan satırdan // #Gerekli açığa satış satıra kadar olan satırları kopyalayıp kendi stratejinizde ilgili yere yapıştırılması gerekir.
Ayrıca alış koşulunun olduğu if blogunun içine FX_Alis(Symbol,BuyOrderQuantity); satış koşuluna da FX_Satis(Symbol,SellOrderQuantity);
Buradaki BuyOrderQuantity ve SellOrderQuantity değişkenleri yerine stratejinizdeki alış satış adedini yazmanız gerekir.
Bu yapı Viop, Binance Futere ve Bitmex semboller için uygundur.
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;
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;
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ış
}
}