Merhabalar,
Hisse senedi mi yoksa coin de mi çalıştıracağınıza lütfen dikkat ediniz. Coin'de işlem yapıyor iseniz ve komisyonlarınız BNB üzerinden kesiliyorsa Komisyondahil et kısmını işaretlemenize gerek yoktur.
Stratejideki MinSize Binance’de geçerli bir değişkendir. İşlem yaptığınız sembole göre giriş yapınız.
Mesela ADA_USDT_BIN sembolü için MinSize değerini 0.01 girmelisiniz. (https://www.binance.com/tr/trade-rule)

***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***
using System;
using System.Collections.Generic;
using System.Linq;
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 OttTumBakiyeStrategy : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(2)]
public int OttPeriod1;
[Parameter(1.4)]
public decimal OttOpt1;
[Parameter(MovMethod.VAR)]
public MovMethod OttMethod1;
[Parameter(true)]
public bool OttSupportLine1;
OTT ott;
[Output][Parameter(1000)]
public decimal Bakiye;
[Parameter(0)]
public decimal BaslangıctakiEnstrumanAdedi;
[Parameter(true)]
public bool KomisyonuDahilEt;
[Parameter(0.001)]
public decimal Komisyon;
[Parameter(true)]
public bool HisseSenediMI;
[Parameter(1)]
public decimal MinSize;
public decimal Tutar;
[Output]
public decimal Adet;
public bool BakiyeKontrolu = true;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OttPeriod1, OttOpt1, OttMethod1, OttSupportLine1);
WorkWithPermanentSignal(true);
SendOrderSequential(true, Side.All);
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (CrossAbove(ott, ott, 1, 0))
{
FX_Alis();
}
if (CrossBelow(ott, ott, 1, 0))
{
FX_Satis();
}
}
public decimal FX_Sonfiyat()
{
var barDataModel = GetBarData();
decimal _close = Ref(barDataModel, OHLCType.Close, 0);
return _close;
}
public bool FX_BalanceKontrolu()
{
if (HisseSenediMI)
{
return (Math.Floor(Bakiye / FX_Sonfiyat()) >0) ? true: false;
}
else
{
return true;
}
}
public decimal FX_MinSize(decimal quantity)
{
return Math.Truncate((quantity - (quantity % MinSize)) / MinSize) * MinSize;
}
bool ? AlisMI = null;
public void FX_Alis()
{
decimal _close = FX_Sonfiyat();
if (FX_BalanceKontrolu() && AlisMI != true)
{
if (HisseSenediMI)
{
Adet = Math.Floor(Bakiye / _close);
}
else
{
Adet = FX_MinSize(Bakiye / _close);
}
SendMarketOrder(Symbol, Adet, (OrderSide.Buy));
Debug("Alış sinyali oluştu. Sinyal fiyatı: " + _close + " - Adet: " + Adet);
}else
{
Debug("Alış sinyali oluştu. Bakiyeniz yetersiz. Bakiye: " + Bakiye);
}
}
public void FX_Satis()
{
if (((Adet != 0 || BaslangıctakiEnstrumanAdedi != 0)) && AlisMI != false)
{
Adet += BaslangıctakiEnstrumanAdedi;
SendMarketOrder(Symbol, Adet, (OrderSide.Sell));
Debug("Satış sinyali oluştu. Sinyal fiyatı: " + FX_Sonfiyat() + " - Adet: " + Adet);
}else
{
Debug("Satış sinyali oluştu. Satılacak enstrüman yok. Bakiye: " + Bakiye);
}
}
decimal _fiyat;
public override void OnOrderUpdate(IOrder order)
{
_fiyat = order.Price;
if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
{
Tutar = Adet * _fiyat; ;
Bakiye -= Tutar;
Adet += BaslangıctakiEnstrumanAdedi;
BaslangıctakiEnstrumanAdedi = 0;
Debug("Alış gerçekleşti. Gerçekleşen fiyat: " + _fiyat + " - Adet: " + Adet + "- Tutar: " + Tutar + " - Bakiye: " + Bakiye);
if (KomisyonuDahilEt)
{
if (HisseSenediMI)
{
Bakiye -= (Bakiye * Komisyon);
}else
{
Adet = FX_MinSize(Adet - Adet * Komisyon);
}
}
AlisMI = true;
}
if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
{
Tutar = Adet * _fiyat;
Bakiye += Tutar;
Debug("Satış gerçekleşti. Gerçekleşen fiyat: " + _fiyat + " - Adet: " + Adet + " - Tutar: " + Tutar + " - Kalan bakiye: " + Bakiye);
Adet = 0;
BaslangıctakiEnstrumanAdedi = 0;
if (KomisyonuDahilEt)
{
Bakiye -= (Bakiye * Komisyon);
}
AlisMI = false;
}
}
}
}