Merhaba,
Aşağıdaki strateji emir gönderim adetlerini parametre olarak verilen bakiye değerine göre hesaplamaktadır. Stratejiyi çalıştırırken girdiğiniz bakiye değerinde artma ya da azalma olmayacaktır. Sanırım istediğiniz durumu karşılar.
Stratejinin sonuçlarından emin olmadan gerçek hesap ile kullanmayanız.
İyi çalışmalar
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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 KriptoBakiye : MatriksAlgo
{
[SymbolParameter("BTC_USDT_BIN")]
public string Symbol;
[Parameter(SymbolPeriod.Min15)]
public SymbolPeriod SymbolPeriod;
[Parameter(100)]
public decimal Bakiye;
[Parameter(20)]
public int BolPeriod;
[Parameter(2)]
public decimal StandartDeviation;
BOLLINGER bollinger;
[Output]
public decimal SonBakiye;
public override void OnInit()
{
bollinger = BollingerIndicator(Symbol, SymbolPeriod, OHLCType.Close, BolPeriod, StandartDeviation, MovMethod.Simple);
AddSymbol(Symbol, SymbolPeriod);
WorkWithPermanentSignal(true);
}
int pozisyon = 0;
bool firstrun = true;
decimal Adet = 0;
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
var bardata = GetBarData();
var SonFiyat = barDataCurrentValues.LastUpdate.Close;
if (firstrun) SonBakiye = Bakiye;
var IslemAdedi = SonBakiye / SonFiyat;
IslemAdedi = Math.Truncate(IslemAdedi * 10000) / 10000;
if (CrossAbove(bardata, bollinger.BollingerDown, OHLCType.Close))
{
Debug("Alış emri verildi.");
if (pozisyon == 0 && IslemAdedi >=0.0001m)
{
pozisyon = 1;
SonBakiye = 0;
Adet = IslemAdedi;
SendMarketOrder(Symbol, IslemAdedi, OrderSide.Buy);
}else if (pozisyon == -1)
{
pozisyon = 0;
SonBakiye = Bakiye;
SendMarketOrder(Symbol, Adet, OrderSide.Buy);
Adet = 0;
}
}
if (CrossBelow(bardata, bollinger.BollingerDown, OHLCType.Close))
{
Debug("Satış emri verildi.");
if (pozisyon == 0 && IslemAdedi >=0.0001m)
{
pozisyon = -1;
SonBakiye = 0;
Adet = IslemAdedi;
SendMarketOrder(Symbol, IslemAdedi, OrderSide.Sell);
}else if (pozisyon == 1)
{
pozisyon = 0;
SonBakiye = Bakiye;
SendMarketOrder(Symbol, Adet, OrderSide.Sell);
Adet = 0;
}
}
firstrun = false;
}
public override void OnOrderUpdate(IOrder order)
{
}
}
}
Diyelim ki Binance Kasa: 100 Lira ve 10 adet AltCoin ile trade etmek istiyorum. Birinin al sinyali geldi; 100/10=10 liradan o işleme girdi. Sonra ikinci coin için al sinyali geldi; bu durumda 90/10= 9 değil de; geride 9 Altcoin kaldığı için 90/9=10 liralık işlem açabiliyor muyuz? Yani al sinyali geldiğinde, kasadaki parayı işlemde olmayan Altcoin sayısına bölüp işleme alsın istesek; abartmış olur muyuz?