0 beğenilme 0 beğenilmeme
61 kez görüntülendi
Merhaba,

TOTT çift yönlü işlemler için kullandığım aşağıdaki kodda bir hata var mıdır?

Sat sinyali geldiği halde emir göndermedi! (Kaldırac 0 mı olmalı 1 mi BIST VIOP tarafında)

Teşekkürler,

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;

 

namespace Matriks.Lean.Algotrader

{

public class TOTT_Okan : MatriksAlgo

{

[SymbolParameter("FGARAN")]

public string Symbol;

 

[Parameter(SymbolPeriod.Min5)]

public SymbolPeriod SymbolPeriod;

 

[Parameter(5)]

public decimal BuyOrderQuantity;

 

[Parameter(5)]

public decimal SellOrderQuantity;

 

[Parameter(40)]

public int TOTTPeriod;

 

[Parameter(1)]

public decimal TOTTOpt;

 

[Parameter(0.001d)]

public decimal TwinOttCoef;

 

[Parameter(MovMethod.Variable)]

public MovMethod TottMovMethod;

 

[Parameter(3)]

public int KaldiracOrani;

 

 

TOTT tott;

 

public override void OnDataUpdate(BarDataEventArgs barData)

{

if (CrossAbove(tott.Mov, tott.OttUp))

{

FX_Alis();

}

 

if (CrossBelow(tott.Mov, tott.OttDown))

{

FX_Satis();

}

}

 

public override void OnInit()

{

AddSymbol(Symbol, SymbolPeriod);

tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TOTTPeriod, TOTTOpt, TwinOttCoef, TottMovMethod);

 

// Gerekli

WorkWithPermanentSignal(true);

 

if (AcigaSatisYapilsin)

{

SendOrderSequential(true, Side.Buy);

SendOrderSequentialForShort(true, Side.All);

}else

{

SendOrderSequential(true, Side.Buy);

}

// #Gerekli

 

// kaldıraç oranı

SetLeverage(Symbol, KaldiracOrani);

// kaldıraç tipi – true isolated, false cross

SetLeverageType(Symbol, false);

// Gerekli

 

}

 

[Parameter(false)]

public bool AcigaSatisYapilsin;

 

[Parameter(false)]

public bool AksamSeansiniDahilEt;

 

List<string> orderIDList = new List<string>();

 

public void FX_Alis()

{

string _orderID = string.Empty; ;

decimal _quantity = 0;

 

if (LastOrderSide.Obj != Side.Buy)

{

if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)

{

_orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

_quantity = BuyOrderQuantity;

}else

{

if (LastOrderSideForShort.Obj == Side.All)

{

_orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

_quantity = BuyOrderQuantity;

}else

{

_orderID = SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

_quantity = BuyOrderQuantity * 2;

}

}

 

if (_orderID != string.Empty && _quantity != 0)

{

orderIDList.Add(_orderID);

Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");

LastOrderSide.Obj = Side.Buy;

LastOrderSideForShort.Obj = Side.Buy;

}

}

}

 

public void FX_Satis()

{

string _orderID = string.Empty; ;

decimal _quantity = 0;

 

if (LastOrderSide.Obj != Side.Sell)

{

if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)

{

_orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

_quantity = SellOrderQuantity;

}else

{

if (LastOrderSideForShort.Obj == Side.All)

{

_orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

_quantity = SellOrderQuantity;

 

}else

{

_orderID = SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

_quantity = SellOrderQuantity * 2;

}

}

 

 

if (_orderID != string.Empty && _quantity != 0)

{

orderIDList.Add(_orderID);

Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");

LastOrderSide.Obj = Side.Sell;

LastOrderSideForShort.Obj = Side.Sell;

}

}

}

 

public override void OnOrderUpdate(IOrder order)

{

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

{

// Senntetik emirler tanımlanıyor

// StopLoss(Symbol, SyntheticOrderPriceType.Percent, 1);

// TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 1);

if (!orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)

{

LastOrderSideForShort.Obj = Side.All;

Debug("Sentetik emir tetiklendi");

}

}

}

// #Gerekli

}

}
önce Algoritmik Trading kategorisinde (18 puan) tarafından | 61 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme
Merhaba,

Stratejide herhangi bir sorun görünmüyor her şey olması gereken gibi çalıştırdığınız zaman aralığında backtest yapıp koşulun sağlanıp sağlanmadığını kontrol edebilirsiniz.

Not: Kaldıraç ayarlaması sadece Binance borsası için geçerli ve backtest sonuçlarını etkilemez VIOP sembolleri için geçersizdir.
önce (16,102 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,033 soru
8,985 cevap
4,999 yorum
24,264 kullanıcı