Matriks Destek ve Yardım Platformu

Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. 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.

0

strateji eksik ve hatalı düzeltebilirmisiniz

Soruldu
Görüntülenme
722 görüntülenme
Durum
Çözüldü
Most İndikatörü ile

bir önceki barın (Low) % 70 üstünde alsın, bir önceki barın (High) %70 altında Satsın.

Times hasası verince tekrar emir göndersin

iptal yada red edilen limit emir olursa tekrar göndersin

aşagıda bir kod derledim ama hem eksik hemde hata veriyor.

düzenleyebilirmisiniz.

​

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks;

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 BTC_USDT_BIN_Iz_Suren_HeikenAshi : MatriksAlgo

{

/// <summary>

///

///  #Gerekli - Timestamp yazan aralıkları ilgili yerlere eklendiğinde binance tarafından alınan timestamp hatasının kontrolünü eklemiş oluyoruz

/// emir tekrarlanarak yeniden gönderiliyor

/// strateji çalıştırılıken aynı emir kaç defa gönderilsin ve kaç saniye sonra tekrar gönderilsin parametrelerinin değiştirilmesine gerek yoktur.

/// sadece timestamp hatasına düştüğünde aynı emrin gerçekleşmesi adına 3 kere emir gönderimini deneyecektir

///

///  

/// </summary>

 

[SymbolParameter("BTC_BUSD_BIN")]

public string Symbol1;

[Parameter(SymbolPeriod.Min)]

public SymbolPeriod SymbolPeriod1;

[Parameter(3)]

public int MostPeriod1;

[Parameter(0.01)]

public decimal MostPercentage1;

[Parameter(MovMethod.Tsf)]

public MovMethod MostMovMethod1;

[Parameter(0.032)]

public decimal OrderQuantity1;

[Parameter(0.00567)]

public decimal StopLevel1;

 

 

MOST most;

MOST most1;

public override void OnInit()

{

var periodInfo = GetHeikinAshiPeriodInfo(SymbolPeriod1);

AddSymbol(Symbol1, periodInfo);

most = MOSTIndicator(Symbol1, periodInfo, OHLCType.WClose, MostPeriod1, MostPercentage1, MostMovMethod1);

most1 = MOSTIndicator(Symbol1, periodInfo, OHLCType.WClose, MostPeriod1, MostPercentage1, MostMovMethod1);

SendOrderSequential(true, Side.Buy);

WorkWithPermanentSignal(true);

 

// Gerekli - Timestamp

SetTimerInterval(1);

// #Gerekli - Timestamp

}

 

public override void OnDataUpdate(BarDataEventArgs barData)

{

var fiyat = GetBarData(Symbol1, SymbolPeriod1); // fiyat

 

if (CrossAbove(most, most, 1, 0))

{

//al için limit emir

SendLimitOrder(Symbol1, OrderQuantity1, OrderSide.Buy, GetSelectedValueFromBarData(fiyat, OHLCType.Low), includeAfterSession:false);

Debug("al limit emir gönderildi" + GetSelectedValueFromBarData(fiyat, OHLCType.Low));

 

}

if (CrossBelow(most, most1, 1, 0))

{

//sat için limit emir

SendLimitOrder(Symbol1, OrderQuantity1, OrderSide.Sell, GetSelectedValueFromBarData(fiyat, OHLCType.High), includeAfterSession:false);

TrailingStopLoss(Symbol1, SyntheticOrderPriceType.Percent, StopLevel1);

Debug("sat  limit emir gönderildi" + GetSelectedValueFromBarData(fiyat, OHLCType.High));

 

}

 

}

 

// Gerekli - Timestamp

public class OrderListTimestamp

{

public string ID;

public string Symbol;

public decimal Adet;

public decimal Fiyat;

public OrdType EmirTipi;

public OrderSide orderSide;

public string EmirYonu;

public DateTime TetiklenmeZamani;

public int Sayac;

public bool AktifMI;

}

 

Dictionary<string, OrderListTimestamp> timestampDict = new Dictionary<string, OrderListTimestamp>();

 

[Parameter(10)]

public int AyniEmirKacSeferGonderilsin;

 

[Parameter(4)]

public int KacSaniyeSonraTekrarGonderilsin;

 

string orderIDTimestamp = string.Empty;

// #Gerekli - Timestamp

 

public override void OnTimer()

{

// Gerekli - Timestamp

var tutt = timestampDict.Where(x => x.Value.AktifMI == true && DateTime.Now >= x.Value.TetiklenmeZamani);

 

if (tutt.Count() >0)

{

foreach (var deger in tutt)

{

LastOrderSide.Obj = deger.Value.orderSide == OrderSide.Buy? Side.Sell:Side.Buy;

 

if (deger.Value.EmirTipi.Obj == OrdType.Limit)

{

orderIDTimestamp = SendLimitOrder(deger.Value.Symbol, deger.Value.Adet, deger.Value.orderSide, deger.Value.Fiyat);

Debug(deger.Value.EmirYonu + " emri tekrar gönderildi.");

}else if (deger.Value.EmirTipi.Obj == OrdType.Market)

{

orderIDTimestamp = SendMarketOrder(deger.Value.Symbol, deger.Value.Adet, deger.Value.orderSide);

Debug(deger.Value.EmirYonu + " emri tekrar gönderildi.");

}

 

deger.Value.ID = orderIDTimestamp;

deger.Value.AktifMI = false;

timestampDict[orderIDTimestamp] = deger.Value;

timestampDict.Remove(deger.Key);

 

}

}

// #Gerekli - Timestamp

// #İptal edilen Emitr Gönderimi

}

 

public override void OnOrderUpdate(IOrder order)

{

if (order.OrdStatus.Obj == OrdStatus.Rejected)

{

var adet = order.OrderQty;

 

if (order.Side.Obj == Side.Buy)

{

// Emirler sıralı gönderilmesi aktif ise tekrar alış göndermek için sıra değiştiriliyor.

LastOrderSide.Obj = Side.Sell;

SendMarketOrder(Symbol1, 2, OrderSide.Buy);

Debug("Alış emri tekrar gönderildi.");

}

else

{

LastOrderSide.Obj = Side.Buy;

SendMarketOrder(Symbol1, 2, OrderSide.Sell);

Debug("Satış emri tekrar gönderildi.");

 

 

 

// Gerekli - Timestamp

if (order.OrdStatus.Obj == OrdStatus.Filled)

{

if (timestampDict.ContainsKey(order.CliOrdID))

{

timestampDict.Remove(order.CliOrdID);

Debug("Timestamp hatasına takılan emriniz gerçekleşti.");

}

}

 

if (order.OrdStatus.Obj == OrdStatus.Rejected)

{

if (!timestampDict.ContainsKey(order.CliOrdID))

{

OrderListTimestamp orderList = new OrderListTimestamp();

orderList.ID = order.CliOrdID;

orderList.Symbol = order.Symbol;

orderList.Adet = order.OrderQty;

orderList.Fiyat = order.Price;

orderList.EmirTipi = order.OrdType;

orderList.TetiklenmeZamani = DateTime.Now;

orderList.Sayac = 0;

orderList.AktifMI = false;

 

if (order.Side.Obj == Side.Buy)

{

orderList.orderSide = OrderSide.Buy;

orderList.EmirYonu = "Alış";

}else

{

orderList.orderSide = OrderSide.Sell;

orderList.EmirYonu = "Satış";

}

 

timestampDict[order.CliOrdID] = orderList;

}

 

if (order.Text.Contains("Timestamp"))

{

if (timestampDict.ContainsKey(order.CliOrdID))

{

if (timestampDict[order.CliOrdID].Sayac < AyniEmirKacSeferGonderilsin)

{

timestampDict[order.CliOrdID].TetiklenmeZamani = DateTime.Now.AddSeconds(KacSaniyeSonraTekrarGonderilsin);

timestampDict[order.CliOrdID].Sayac++;

timestampDict[order.CliOrdID].AktifMI = true;

 

Debug("Emir Timestamp hatasından dolayı iptal oldu tekrar gönderilecek");

}else

{

timestampDict.Remove(order.CliOrdID);

Debug("Aynı emir üst üste " + AyniEmirKacSeferGonderilsin + " defa gönderildi.");

}

}

}

}

}

}

// #Gerekli - Timestamp

 

 

}

}

}
Paylaş

1 Cevap

1

Kabul edilen cevap

Merhabalar,

Akın Bey'e yönlendirdiğiniz mail üzerinden sizlere dönüş sağlanmıştır.

Dilerseniz stratejinizi mail üzerinden gönderip, takibini yapabilirsiniz.

İyi çalışmalar.
BağlantıBayrakladüzenlendi · Seçkin DurgayasiyangMatriks Destek11.113

Cevabınız

Cevap yazmak için giriş yapın.Giriş yapKayıt ol