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)
{
}
}
}