Sayın ilgili,
Binance üzerinde işlem yapmak için IQAlgo üzerinden oluşturduğum stratejide al komutu tetikleniyor ancak sat komutu tetiklenmiyor. Komisyon için yeterli miktarda BNB var. kodu aşağıya ekliyorum. Gerekirse log kayıtlarını da gönderebilirim. Grafikte sat koşulu oluşuyor ama kod sat emrini tetiklemiyor. İnternet ile ilgili de bir sorun yaşamadım. Lütfen yardımcı olabilir mininiz.
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;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;
namespace Matriks.Lean.Algotrader
{
public class XRP_CANLI_10ADET : MatriksAlgo //***
{
// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.
[SymbolParameter("XRP_USDT_BIN")]
public string Symbol1;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod1;
[Parameter(SymbolPeriod.Min15)]
public SymbolPeriod SymbolPeriod2;
[Parameter(25)]
public int PmaxindicatorAtrPeriod2;
[Parameter(5)]
public int PmaxindicatorMovPeriod2;
[Parameter(2)]
public decimal PmaxindicatorCoeff2;
[Parameter(MovMethod.E)]
public MovMethod PmaxindicatorMovMethod1;
[Parameter(4)]
public int MostPeriod1;
[Parameter(1.6)]
public decimal MostPercentage1;
[Parameter(MovMethod.E)]
public MovMethod MostMethod1;
[Parameter(10)]
public int MovPeriod1;
[Parameter(24)]
public int MovPeriod2;
[Parameter(MovMethod.E)]
public MovMethod MovMethod1;
[Parameter(25)]
public int RsiPeriod1;
[Parameter(26)]
public int TottPeriod1;
[Parameter(1.4)]
public decimal TottOpt1;
[Parameter(0.002)]
public decimal TottTwinOttCoef1;
[Parameter(MovMethod.VAR)]
public MovMethod TottMethod1;
MOST most;
MOV mov;
MOV mov2;
RSI rsi;
TOTT tott;
PMaxIndicator pmaxIndicator;
// Başlangıç bakiyesi
[Parameter(100)]
public decimal Bakiye;
// Başlangıç adet
[Parameter(0)]
public decimal StartQuantity;
// Tutar
public decimal Amount;
// Al sat adedi
public decimal Quantity;
// Bakiye kontrolü
public bool BalanceControl = true;
// strateji hisse senedi ile mi coin ile mi kullanılacak
[Parameter(true)]
public bool Coin;
/// <summary>
/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
public override void OnInit()
{
most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MostPeriod1, MostPercentage1, MostMethod1);
mov = MOVIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MovPeriod1, MovMethod1);
mov2 = MOVIndicator(Symbol1, SymbolPeriod2, OHLCType.Close, MovPeriod2, MovMethod1);
rsi = RSIIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, RsiPeriod1);
tott = TOTTIndicator(rsi, TottPeriod1, TottOpt1, TottTwinOttCoef1, TottMethod1);
pmaxIndicator = PMaxIndicators(Symbol1, SymbolPeriod2, PmaxindicatorAtrPeriod2, PmaxindicatorMovPeriod2, PmaxindicatorCoeff2, PmaxindicatorMovMethod1);
SendOrderSequential(true, Side.Buy);
WorkWithPermanentSignal(true);
//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.
// SetTimerInterval(3600);
//Alttaki fonksiyon ile tanımlanan sembol ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.
//AddNewsSymbol(Symbol);
//Alttaki fonksiyon ile tanımlanan anahtar kelime ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.
//AddNewsKeyword("KAP");
}
/// <summary>
/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
/// </summary>
public override void OnInitComplated()
{
}
/// <summary>
/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.
/// </summary>
public override void OnTimer()
{
}
/// <summary>
/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.
/// </summary>
/// <param name="newsId">Gelen haberin id'si</param>
/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>
public override void OnNewsReceived(int newsId, List<string> relatedSymbols)
{
}
/// <summary>
/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
public override void OnDataUpdate(BarDataEventArgs barData)
{
// Bardata verileri
var barDataModel = GetBarData();
// Son fiyat
var Close = barData.BarData.Close;
// Güncel bakiye ile alış yapıp yapamayacağınız kontrolü ediliyor. true ise alış yapabilir
if (Coin)
{
BalanceControl = (Math.Floor(Bakiye / Close) > 0) ? true: false;
}
//ALIŞ TANIMLAMA
if (pmaxIndicator.CurrentValue < mov2.CurrentValue)
{
if (CrossAbove(mov, most, 0, 0) && (tott.Value[0][tott.CurrentIndex] >= tott.Value[2][tott.CurrentIndex]) && BalanceControl == true && Bakiye > 0.00000001m)
{
// Alabileceği adet
if (Coin)
{
Quantity = Math.Floor(Bakiye / Close);
}
else
{
Quantity = Bakiye / Close;
}
// Tutar
Amount = Quantity * Close;
// Güncel bakiye
Bakiye -= Amount;
SendMarketOrder(Symbol1, Quantity, OrderSide.Buy, includeAfterSession:false);
Quantity += StartQuantity;
StartQuantity = 0;
Debug("Alış1 Fiyat: " + Close + " - Adet: " + Quantity + " - Tutar: " + Amount + " - Kalan Bakiye: " + Bakiye);
Debug("Pmax: " + Math.Round(pmaxIndicator.CurrentValue, 4) + " - Mov2: " + Math.Round(mov2.CurrentValue, 4));
Debug("Mov: " + Math.Round(mov.CurrentValue, 4) + " - Most: " + Math.Round(most.CurrentValue, 4));
}
}
//SATIS TANIMLAMA
else if (CrossBelow(tott.Mov, tott.OttDown) || CrossBelow(mov, most, 0, 0) && Quantity > 0)
{
Quantity += StartQuantity;
// Tutar
Amount = Quantity * Close;
// Güncel bakiye
Bakiye += Amount;
SendMarketOrder(Symbol1, Quantity, OrderSide.Sell, includeAfterSession:false);
Quantity = 0;
StartQuantity = 0;
Debug("Satış: " + Close + " - Adet: " + Quantity + " - Tutar: " + Amount + " - Kalan Bakiye: " + Bakiye);
Debug("tott.Mov: " + Math.Round(tott.Mov.CurrentValue, 4) + " - tott.OttDown: " + Math.Round(tott.OttDown.CurrentValue, 4));
Debug("Mov: " + Math.Round(mov.CurrentValue, 4) + " - Most: " + Math.Round(most.CurrentValue, 4));
}
}
}
}