0 beğenilme 0 beğenilmeme
497 kez görüntülendi
merhaba size göndereceğim bu strateji bugun iq da çalışmadı ve emirleri iletmedi,

bu strateji Kıvanç Bey in yazmış oldugu turtle staratejisidir,

sistem kadmeli alıp kademeli satmak üzerine çalışmakta ve kendi içinde stop ve alım şartları vardır,bildigim kadarı ile atr bazlı çalışmakta

benim aklıma gelen

1-sistem vadeli de çalışmak üzere kurgulanmış spotta çalışmıyormu acaba,

2-benim hesabımda hazır hisse lotlarım vardı ve satış için müsayitti ancak acaba sistem alışla başlamak üzerine mi kurgulanmış,

3-belli kontrat büyüklügü üzerinden işlemler açılmakta ve acaba başangıç için burada mı hata yaptım,

4-aynı anda aynı bilgisayarda hem matriks prime hem iq açık olduğu içinmi acaba emir iletimi olmadı

 

gibi konular aklıma geliyor  ancak sizin doğru tespiti yapacagınızı biliyorum ve destek rica ediyorum teşekkür ederim

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks.Data.Symbol;

using Matriks.Engines;

using System.Windows.Media;

using Matriks.Indicators;

using Matriks.Symbols;

using Matriks.AlgoTrader;

using Matriks.Trader.Core;

using Matriks.Trader.Core.Fields;

using Matriks.Trader.Core.TraderModels;

using Matriks.Lean.Algotrader.AlgoBase;

using Matriks.Lean.Algotrader.Models;

using Matriks.Lean.Algotrader.Trading;

 

namespace Matriks.Lean.Algotrader

{

public class release_Fast_Turtle : MatriksAlgo

{

[SymbolParameter("CEMTS")]

public string Symbol;

[Parameter(SymbolPeriod.Day)]

public SymbolPeriod SymbolPeriod;

[Parameter(20)]

public int numBarsHH_LONGENTRY;

[Parameter(10)]

public int numBarsLL_LONGEXIT;

[Parameter(20)]

public int numBarsLL_SHORTENTRY;

[Parameter(10)]

public int numBarsHH_SHORTEXIT;

 

[Parameter(10)]

public decimal kontrat_buyuklugu;

[Parameter(100000)]

public decimal toplam_bakiye;

[Parameter(1)]

public decimal yuzde;

[Parameter(2)]

public int RoundTO;

 

public decimal realposition = 0;

public decimal highest_high_LONGENTRY = 0;

public decimal lowest_low_LONGEXIT = 0;

public decimal lowest_low_SHORTENTRY = 0;

public decimal highest_high_SHORTEXIT = 0;

public decimal LongEntryPrice = 0;

public decimal LongStopPrice = 0;

public decimal ShortEntryPrice = 0;

public decimal ShortStopPrice = 0;

public int PyramidCount = 0;

public int MaxPyramid = 4;

public bool completed = false;

ATRE atre;

 

public override void OnInit()

{

atre = ATREIndicator(Symbol, SymbolPeriod, OHLCType.Close, 20);

AddSymbol(Symbol, SymbolPeriod);

WorkWithPermanentSignal(false);

SendOrderSequential(false);

}

 

public override void OnInitComplated()

{

 

}

 

public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)

{

/*

Level Type Maximum Units

1 Single Market 4 Units

2 Closely Correlated Markets 6 Units

3 Loosely Correlated Markets 10 Units

4 Single Direction - Long or Short 12 Units

*/

 

var barDataModel = GetBarData(Symbol, SymbolPeriod);

var close = barDataCurrentValues.LastUpdate.Close;

var N = atre.CurrentValue;

var TLVOL = atre.CurrentValue * kontrat_buyuklugu;

var unit = yuzde * 0.01m * toplam_bakiye / TLVOL;

var unitROUND = (int) Math.Floor(unit);

 

if (barDataCurrentValues.LastUpdate.IsNewBar == true)

{

if (!completed)

{

highest_high_LONGENTRY = HighestHigh(barDataModel, OHLCType.High, numBarsHH_LONGENTRY);

lowest_low_LONGEXIT = LowestLow(barDataModel, OHLCType.Low, numBarsLL_LONGEXIT);

lowest_low_SHORTENTRY = LowestLow(barDataModel, OHLCType.Low, numBarsLL_SHORTENTRY);

highest_high_SHORTEXIT = HighestHigh(barDataModel, OHLCType.High, numBarsHH_SHORTEXIT);

completed = true;

}

string header, line1;

header = String.Format("{0,-10} {1,-10} {2,-10} {3,-10} {4,-25} {5,-10} {6,-25}", "ATR.E", "TLVOL", "unit", "unitROUND", "highest_high_LONGENTRY", "CLOSE", "lowest_low_SHORTENTRY");

line1 = String.Format("{0,-10} {1,-10} {2,-10} {3,-10} {4,-25} {5,-10} {6,-25}", Math.Round(N, 2), Math.Round(TLVOL, 2), Math.Round(unit, 2), unitROUND, highest_high_LONGENTRY, close, lowest_low_SHORTENTRY);

Debug(header);

Debug(line1);

}

 

//LONG ENTRY. INITIAL ENTRY 20-day breakout (System 1)

if (highest_high_LONGENTRY != 0 && close > highest_high_LONGENTRY && realposition == 0 && PyramidCount == 0)

{

SendMarketOrder(Symbol, unitROUND, OrderSide.Buy);

LongEntryPrice = close;

PyramidCount++;

Debug("Yukari kirilma gerceklesti, 1 unite ALIS emri gonderildi");

LongStopPrice = Math.Round((LongEntryPrice -2 * N), RoundTO);

Debug($"LongStopPrice {LongStopPrice}, olarak olusturuldu.");

}

 

//LONG Adding Units

if (realposition > 0 && close > LongEntryPrice + N / 2 && PyramidCount < MaxPyramid && PyramidCount != 0)

{

SendMarketOrder(Symbol, unitROUND, OrderSide.Buy);

PyramidCount++;

Debug($"Fiyat @{close}, son ALISTAN @{LongEntryPrice}, N/2 @{N/2} yukarida kapatti, {PyramidCount}. ALIS sayisina  ulasildi.");

LongEntryPrice = close;

LongStopPrice = Math.Round(LongStopPrice + N / 2, RoundTO);

Debug($"LongStopPrice {LongStopPrice}, olarak GUNCELLENDI.");

 

}

//Stop Placement

if (realposition > 0 && close <= LongStopPrice && PyramidCount != 0)

{

SendMarketOrder(Symbol, realposition, OrderSide.Sell);

Debug($"Fiyat @{close}, STOP fiyatina @{LongStopPrice} ulasti. {PyramidCount} unite UZUN pozisyon kapatildi.");

LongEntryPrice = 0;

PyramidCount = 0;

LongStopPrice = 0;

}

 

//LONG EXIT

if (realposition > 0 && close < lowest_low_LONGEXIT && PyramidCount != 0)

{

SendMarketOrder(Symbol, realposition, OrderSide.Sell);

Debug($"Fiyat @{close}, CIKIS fiyatina @{lowest_low_LONGEXIT} ulasti. {PyramidCount} unite UZUN pozisyon kapatildi ({realposition}).");

LongEntryPrice = 0;

PyramidCount = 0;

LongStopPrice = 0;

}

 

//==================================================================================================================//

//SHORT ENTRY. INITIAL ENTRY 20-day breakout (System 1)

if (lowest_low_SHORTENTRY != 0 && close < lowest_low_SHORTENTRY && realposition == 0 && PyramidCount == 0)

{

SendMarketOrder(Symbol, unitROUND, OrderSide.Sell);

ShortEntryPrice = close;

PyramidCount--;

Debug("ASAGI kirilma gerceklesti, 1 unite SATIS emri gonderildi");

ShortStopPrice = Math.Round((ShortEntryPrice + 2 * N), RoundTO);

Debug($"ShortStopPrice {ShortStopPrice}, olarak olusturuldu.");

}

 

//SHORT Adding Units

if (realposition < 0 && close < ShortEntryPrice - N / 2 && PyramidCount > - MaxPyramid && PyramidCount != 0)

{

SendMarketOrder(Symbol, unitROUND, OrderSide.Sell);

PyramidCount--;

Debug($"Fiyat @{close}, son SATISTAN @{ShortEntryPrice}, N/2 @{N/2} asagida kapatti, {PyramidCount}. SATIS sayisina ulasildi.");

ShortEntryPrice = close;

ShortStopPrice = Math.Round(ShortStopPrice - N / 2, RoundTO);

Debug($"ShortStopPrice {ShortStopPrice}, olarak GUNCELLENDI.");

 

}

//Stop Placement

if (realposition < 0 && close >= ShortStopPrice && PyramidCount != 0)

{

SendMarketOrder(Symbol, Math.Abs(realposition), OrderSide.Buy);

Debug($"Fiyat @{close}, STOP fiyatina @{ShortStopPrice} ulasti. {PyramidCount} unite KISA pozisyon kapatildi.");

ShortEntryPrice = 0;

PyramidCount = 0;

ShortStopPrice = 0;

}

 

//SHORT EXIT

if (realposition < 0 && close > highest_high_SHORTEXIT && PyramidCount != 0)

{

SendMarketOrder(Symbol, Math.Abs(realposition), OrderSide.Buy);

Debug($"Fiyat @{close}, KISA POZISYON CIKIS fiyatina @{highest_high_SHORTEXIT} ulasti. {PyramidCount} unite KISA pozisyon kapatildi ({realposition}).");

ShortEntryPrice = 0;

PyramidCount = 0;

ShortStopPrice = 0;

}

 

highest_high_LONGENTRY = HighestHigh(barDataModel, OHLCType.High, numBarsHH_LONGENTRY);

lowest_low_LONGEXIT = LowestLow(barDataModel, OHLCType.Low, numBarsLL_LONGEXIT);

lowest_low_SHORTENTRY = LowestLow(barDataModel, OHLCType.Low, numBarsLL_SHORTENTRY);

highest_high_SHORTEXIT = HighestHigh(barDataModel, OHLCType.High, numBarsHH_SHORTEXIT);

}

 

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;

var LastExecPrice = order.LastPx;

realposition += (int) positionChange;

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

}

 

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

{

var positionChange = order.OrderQty;

var LastExecPrice = order.LastPx;

realposition -= (int) positionChange;

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

}

}

}

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

1 cevap

0 beğenilme 0 beğenilmeme
Merhaba,

Gönderdiğiniz stratejideki default parametre değerleriyle mi çalıştırdınız ayrıca iqdestek@matriksdata.com adresine help desk'e gönder ile oluşan zip dosyasını gönderebilirseniz inceleyelim.
(15,892 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.



8,636 soru
8,590 cevap
4,821 yorum
19,790 kullanıcı