MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
187 kez görüntülendi
merhaba düzenlediğim  stratejim açığa satış ve al sat işlemlerini çoğukez  yapmıyor  stratejiyi kontrol edermisiniz neresinde hatam var  

//bu çalıştı

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Matriks.Data.Symbol;

using Matriks.Engines;

using Matriks.Indicators;

using Matriks.Lean.Algotrader.AlgoBase;

using Matriks.Lean.Algotrader.Models;

using Matriks.Trader.Core;

using Matriks.Trader.Core.Fields;

 

 

namespace Matriks.Lean.Algotrader

{

public class most2adkademeli: 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("XBT_USD_BMEX")]

public string Symbol;

[Parameter(SymbolPeriod.Min)]

public SymbolPeriod SymbolPeriod;

[Parameter(1)]

public decimal BuyOrderQuantity;

[Parameter(1)]

public decimal SellOrderQuantity;

//MOST1

[Parameter(2)]

public int MOST1_periyot;

[Parameter(0.05)]

public decimal MOST1_yuzde;

[Parameter(MovMethod.Variable)]

public MovMethod MOST1_MovMethod;

 

//MOST2

[Parameter(2)]

public int MOST2_periyot;

[Parameter(0.3)]

public decimal MOST2_yuzde;

[Parameter(MovMethod.Variable)]

public MovMethod MOST2_MovMethod;

 

[Parameter(false)]

public bool AcigaSatisYapilsin;

 

int FirstRun = 0;

int realposition = 0;

 

 

MOST most1;

MOST most2;

public override void OnInit()

{

most1 = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, MOST1_periyot, (decimal) MOST1_yuzde, MOST1_MovMethod);

most2 = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, MOST2_periyot, (decimal) MOST2_yuzde, MOST2_MovMethod);

 

 

AddSymbol(Symbol, SymbolPeriod);

 

// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.

// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.

WorkWithPermanentSignal(true);

 

//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir.

//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz.

SendOrderSequential(false);

}

 

 

/// <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)

{

var most1line = Math.Round(most1.CurrentValue, 2);

var exmov1 = Math.Round(most1.ExMOV.CurrentValue, 2);

var most2line = Math.Round(most2.CurrentValue, 2);

var exmov2 = Math.Round(most2.ExMOV.CurrentValue, 2);

 

Debug("***********************************************");

Debug("most1 = " + exmov1);

Debug("most1 = " + exmov1);

 

//long_entry

if (CrossAbove(most2.ExMOV, most2) && exmov1 > most1 && realposition == 0)

{

SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));

Debug("Alış emri gonderildi.");

}

//short_entry

if (CrossBelow(most2.ExMOV, most2) && exmov1 < most1 && realposition == 0)

{

SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));

Debug("Satış emri gonderildi.");

}

//long_exit

if (CrossBelow(exmov1, most1) && realposition > 0)

{

SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Sell));

Debug("Long pozisyon kapatildi.");

}

//short_exit

if (CrossAbove(exmov1, most1) && realposition < 0)

{

SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));

Debug("Short pozisyon kapatildi.");

}

}

 

public override void OnOrderUpdate(IOrder order)

{

//Gercek zamanli pozisyon takibi

if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)

{

var positionChange = order.OrderQty;

realposition += (int) positionChange;

Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);

}

if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)

{

var positionChange = order.OrderQty;

realposition -= (int) positionChange;

Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);

}

}

}

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

1 cevap

4 beğenilme 0 beğenilmeme
Selamlar,

WorkWithPermanentSignal(true); değişkenini WorkWithPermanentSignal(false); olarak değiştirirseniz sorununuz düzelecektir.  

İyi günler,
(216 puan) tarafından
2,609 soru
2,503 cevap
2,086 yorum
1,830 kullanıcı