0 beğenilme 0 beğenilmeme
199 kez görüntülendi
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));

 

}

 

 

}

 

}

 

 

 

}
Algoritmik Trading kategorisinde (22 puan) tarafından | 199 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

stratejide emirler sekmesinde aldığı miktar kadar satış emri göndermiş mi onu kontrol ediniz.

Ayrıca emir günlük kaydından ve stratejideki loglar sekmesinde iptal edilen emrin detayına ulaşabilirsiniz.

Eğer bakiye ile ilgili bir hata değilse logları ve stratejiyi iqdestek@matriksdata.com mail gönderin inceleyelim.

bu konunun linkini de paylaşınız.

(15,682 puan) tarafından
7,633 soru
7,639 cevap
4,448 yorum
10,837 kullanıcı