0 beğenilme 0 beğenilmeme
83 kez görüntülendi
Timestamp for this request was 1000ms ahead of the server's time. Timestamp for this request was 1000ms ahead of the server's time.

SS: https://prnt.sc/Sf4olfhQhvQ4

Merhabalar,

Stratejimi çalıştırdığımda(Kripto) Sentetik emir tetiklendi ve reddedildi, bu hatayı verdi, sonradan streamconnection bağlantı koptu ve bağlandı hatası aldım sürekli. Stratejimin kodunu aşağıya bırakıyorum:

 

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks;
using Matriks.Data.Symbol;
using Matriks.Data.Tick;
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;
using Matriks.Enumeration;
using Matriks.IntermediaryInstitutionAnalysis.Enums;
using Newtonsoft.Json;
 
namespace Matriks.Lean.Algotrader
{
    public class MOTTCiftYonWithTP : MatriksAlgo
    {
        // ------------------ Temel Parametreler ------------------ //
        [SymbolParameter("BTC_USDT_FBIN")]
        public string Symbol1;
 
        [Parameter(SymbolPeriod.Min)]
        public SymbolPeriod SymbolPeriod1;
 
        [Parameter(Side.All)]
        public Side orderSide;
 
        [Parameter(true)]
        public bool SendsTelegramNotifications;
 
        [Parameter("MOTTCiftYonWithTP - Koşul 1 gerçekleşti.")]
        public string TelegramBotMessage1;
 
        [Parameter("MOTTCiftYonWithTP - Koşul 2 gerçekleşti.")]
        public string TelegramBotMessage2;
 
        [Parameter(21)]
        public int MovPeriod1;
 
        [Parameter(MovMethod.S)]
        public MovMethod MovMovMethod1;
 
        [Parameter(245)]
        public int MottX11;
 
        [Parameter(2)]
        public decimal MottX21;
 
        [Parameter(0)]
        public int MottOteleme1;
 
        // Alım/Satım işlemleri için tek OrderQuantity
        [Parameter(1)]
        public decimal OrderQuantity;
 
        // Tek leverage parametresi (hem long hem short işlemler için)
        [Parameter(3)]
        public decimal Leverage;
 
        [Parameter(CryptoLeverageType.Isolated)]
        public CryptoLeverageType LeverageType;
 
        // Açığa satış entegrasyonu için parametre (varsayılan true)
        [Parameter(true)]
        public bool AcigaSatisYapilsin;
 
        // ------------------ BBW Parametreleri ------------------ //
        [Parameter(20)]
        public int BbwPeriod;
 
        [Parameter(2)]
        public decimal BbwStandardDeviation;
 
        [Parameter(MovMethod.S)]
        public MovMethod BbwMovMethod;
 
        [Parameter(15)]
        public decimal BbwThreshold;
 
        // ------------------ Stop Level (Take Profit) & Stop Loss Parametreleri ------------------ //
        // Hem long hem de short işlemler için aynı stop seviyeleri kullanılacaktır.
        [Parameter(4)]
        public decimal StopLevel;
 
        [Parameter(4)]
        public decimal StopLoss;
 
        // ------------------ Göstergeler ------------------ //
        MOV mov;
        MatriksIndicator MOTT;
        BBW bbw;
 
        // Sentetik emir tetiklenip tetiklenmediğini kontrol etmek için flag
        bool syntheticOrderTriggered = false;
 
        public override void OnInit()
        {
            // MOV ve MOTT göstergeleri
            mov = MOVIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MovPeriod1, MovMovMethod1);
            MOTT = new MOTT();
            MOTT.SetIndicatorParameters("X1", MottX11);
            MOTT.SetIndicatorParameters("X2", MottX21);
            MOTT.SetIndicatorParameters("Oteleme", MottOteleme1);
            RegisterUserIndicator(MOTT, Symbol1, SymbolPeriod1, OHLCType.Close, 5);
 
            // BBW göstergesini başlatıyoruz.
            bbw = BBWIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, BbwPeriod, BbwStandardDeviation, BbwMovMethod);
 
            // Tek leverage parametresi kullanılarak tüm işlemler için ayarlama yapılıyor.
            SetLeverage(Symbol1, Leverage);
            SetLeverageType(Symbol1, LeverageType);
 
            SendOrderSequential(true, orderSide);
            WorkWithPermanentSignal(true);
 
            // SetTimerInterval(3600);
            // AddNewsSymbol(Symbol);
            // AddNewsKeyword("KAP");
        }
 
        public override void OnInitCompleted() { }
 
        public override void OnTimer() { }
 
        public override void OnNewsReceived(int newsId, List<string> relatedSymbols) { }
 
        /// <summary>
        /// OnDataUpdate: Önce BBW threshold filtresi uygulanır. Ardından, MOV ve MOTT göstergeleriyle alım/satım sinyalleri kontrol edilir.
        /// Açığa satış mantığı ile; eğer mevcut pozisyon ters yönde ise emir miktarı OrderQuantity * 2 olarak gönderilir.
        /// Ancak, sentetik emir tetiklenmişse emir miktarı temel (base) miktar (OrderQuantity) kullanılır.
        /// Ayrıca, her emirden sonra take profit (StopLevel) ve stop loss (StopLoss) emirleri de gönderilir.
        /// </summary>
        /// <param name="barData">Bardata ve hesaplanan gerçekleşen işlem detayları</param>
        public override void OnDataUpdate(BarDataEventArgs barData)
        {
            // BBW threshold kontrolü: Eğer BBW değeri eşik değerinin altında ise emir gönderme.
            if (bbw.CurrentValue < BbwThreshold)
                return;
 
            // ALIM sinyali: MOV ve MOTT göstergeleri arasındaki yukarı kesişmeler
            if (CrossAbove(mov, MOTT, 0, 0) || CrossAbove(mov, MOTT, 0, 1) ||
                CrossAbove(mov, MOTT, 0, 2) || CrossAbove(mov, MOTT, 0, 3))
            {
                if (LastOrderSide.Obj != Side.Buy)
                {
                    var _buyQuantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin || syntheticOrderTriggered)
                                        ? OrderQuantity : OrderQuantity * 2;
                    SendMarketOrder(Symbol1, _buyQuantity, OrderSide.Buy, includeAfterSession: false);
                    
                    // Take Profit ve Stop Loss emirlerini gönderiyoruz.
                    TakeProfit(Symbol1, SyntheticOrderPriceType.Percent, StopLevel, includeAfterSession: false);
                    StopLoss(Symbol1, SyntheticOrderPriceType.Percent, StopLoss, includeAfterSession: false);
 
                    if (SendsTelegramNotifications)
                    {
                        SendTelegramBot(TelegramBotMessage1);
                    }
                    syntheticOrderTriggered = false; // Emir gönderildikten sonra flag sıfırlanır.
                }
            }
 
            // SATIM sinyali: MOV ve MOTT göstergeleri arasındaki aşağı kesişmeler
            if (CrossBelow(mov, MOTT, 0, 0) || CrossBelow(mov, MOTT, 0, 1) ||
                CrossBelow(mov, MOTT, 0, 2) || CrossBelow(mov, MOTT, 0, 3))
            {
                if (LastOrderSide.Obj != Side.Sell)
                {
                    var _sellQuantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin || syntheticOrderTriggered)
                                         ? OrderQuantity : OrderQuantity * 2;
                    SendMarketOrder(Symbol1, _sellQuantity, OrderSide.Sell, includeAfterSession: false);
                    
                    // Take Profit ve Stop Loss emirlerini gönderiyoruz.
                    TakeProfit(Symbol1, SyntheticOrderPriceType.Percent, StopLevel, includeAfterSession: false);
                    StopLoss(Symbol1, SyntheticOrderPriceType.Percent, StopLoss, includeAfterSession: false);
 
                    if (SendsTelegramNotifications)
                    {
                        SendTelegramBot(TelegramBotMessage2);
                    }
                    syntheticOrderTriggered = false;
                }
            }
        }
 
        /// <summary>
        /// Sentetik emir (örneğin TP veya SL tetiklenmesi) gerçekleştiğinde bu metod çalışır.
        /// Böylece, sonraki ters yöndeki emirlerde quantity * 2 mantığı yerine temel OrderQuantity kullanılır.
        /// </summary>
        /// <param name="sOrder">Sentetik emir bilgileri</param>
        public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
        {
            if (sOrder.EnableOrderSending)
            {
                syntheticOrderTriggered = true;
                // Pozisyon tamamen kapandıysa, LastOrderSide sıfırlanabilir.
                LastOrderSide.Obj = Side.All;
            }
            Debug("Sentetik emir tetiklendi, syntheticOrderTriggered = true");
        }
 
        public override void OnOrderUpdate(IOrder order) { }
 
        public override void OnStopped() { }
    }
}
Algoritmik Trading kategorisinde (28 puan) tarafından | 83 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,
Binance kaynaklı hatalarda emirler iptale düşebiliyor. Bu durumlarda emir tekrarının olması gerekir.
Aşağıdaki bağlantıda daha önce cevaplanmış destek sorusu var.
https://destek.matriksdata.com/?qa=22145/tekrar-emir-gonderimi&show=22145#q22145

Şablonu kendi çalışmanıza entegre edebilirsiniz.
İyi çalışmalar dileriz.

(4,148 puan) tarafından
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



9,103 soru
9,058 cevap
5,022 yorum
25,635 kullanıcı