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);
}
}
}
}