MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
246 kez görüntülendi
Merhaba Ema 2 çizgisi ile OTT çizgisinin kesişimlerinde al sat yaparak daily trade yapmaya calısıyorum ama malum yatayda cok zarar etmeme sebep olan bir strateji.Bu stratejiyi Parablic Sar ile desteklemek istiyorum.

Ema 2 OTT'yi yukarı kırdığında alım tetiklensin ve Parabolic sar'a baksın oda alım gösteriyorsa işleme girsin. Ema 2 OTT'yi aşağı kestiğinde yine Parabolic sar'a baksın eğer o sat vermiyor ise işlemden cıkmasın.Keza açığa satış içinde tersi koşullar geçerli. Kod bilgim olmadığı için bu stratejiyi işletemiyorum. Yardımcı olur musunuz lütfen ?
Algoritmik Trading kategorisinde (14 puan) tarafından | 246 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,

Stratejinizde eğer birden fazla indikatör kullanacak iseniz lütfen kullandığınız indikatörlerden birinin koşullarını yukarı kırınca/aşağı kırınca şeklinde oluşturuyorsanız, diğer indikatörün koşullarını </> işaretlerini kullanarak oluşturmalısınız.

Burada bahsettiğiniz ilk al koşulunuz,

Eğer ParabolicSar al koşulunda (ParabolicSar<barData) ise EMA2 OTT'yi yukarı kestiğinde alsın

ve aynı şekilde sat koşulunuz ise,

Eğer ParabolicSar sat koşulunda (ParabolicSar>barData) ise EMA2 OTT'yi aşağı kestiğinde satsındır.

 

Kodlama bilginizin olmadığını düşündüğünüz durumlarda Algoritma Sihirbazı sizler için çok yardımcı olacaktır. Açığa Satış ve Açığa Satış Kapatma pozisyonları da dahil olmak üzere bir çok ögeyi içinde barındırır.

(ParabolicSar < barData ve EMA2 OTT'yi yukarı kırınca) al gibi formülü algoritma sihirbazında rahatlıkla oluşturabilirsiniz.

Lütfen aşağıdaki linki inceleyiniz.

https://destek.matriksdata.com/?qa=6289/algoritma-sihirbazi-farkli-parametreler-oldu%C4%9Funda

İyi çalışmalar.

(3,784 puan) tarafından
0 0

Tekrar merhaba,

Burada bahsettiğiniz ilk al koşulunuz,

Eğer ParabolicSar al koşulunda (ParabolicSar<barData) ise EMA2 OTT'yi yukarı kestiğinde alsın

ve aynı şekilde sat koşulunuz ise,

Eğer ParabolicSar sat koşulunda (ParabolicSar>barData) ise EMA2 OTT'yi aşağı kestiğinde satsındır.

Koşulları ile bir algoritma kurdum fakat backtest sonuçlarında istenilen sonuçları alamadım.Al sat ve açığa sat ve açığa satı kapat komutlarıyla 4 farklı koşul üzerinde bir strateji kurdum. Scriptimi paylaşıyorum, hatamı söyleyebilir misiniz ?

 

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;

using Matriks.AI;

using Matriks.AI.AiParameters;

using Matriks.AI.Data;

using Matriks.Trader.Core.TraderModels;

 

namespace Matriks.Lean.Algotrader

{

public class pbarottacık : 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("BTC_USDT_FBIN")]

public string Symbol1;

 

 

[Parameter(SymbolPeriod.Min60)]

public SymbolPeriod SymbolPeriod1;

 

 

[Parameter(2)]

public int EmaPeriod1;

 

[Parameter(2)]

public int OttPeriod1;

 

[Parameter(3)]

public decimal OttOpt1;

 

[Parameter(MovMethod.VAR)]

public MovMethod OttMovMethod1;

 

[Parameter(true)]

public bool OttSupportLine1;

 

[Parameter(0.02)]

public decimal ParabolicsarAcc1;

 

[Parameter(0.2)]

public decimal ParabolicsarMaxAcc1;

 

[Parameter(1)]

public decimal OrderQuantity1;

 

[Parameter(1)]

public decimal OrderQuantity2;

 

[Parameter(1)]

public decimal OrderQuantity3;

 

[Parameter(1)]

public decimal OrderQuantity4;

 

EMA ema;

OTT ott;

ParabolicSAR parabolicSar;

 

 

 

public override void OnInit()

{

 

ema = EMAIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, EmaPeriod1);

ott = OTTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, OttPeriod1, OttOpt1, OttMovMethod1, OttSupportLine1);

parabolicSar = ParabolicSARIndicator(Symbol1, SymbolPeriod1, ParabolicsarAcc1, ParabolicsarMaxAcc1);

 

SendOrderSequential(true, Side.Buy);

SendOrderSequentialForShort(true, Side.Sell);

 

WorkWithPermanentSignal(true);

 

//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.

// SetTimerInterval(3600);

 

//Alttaki fonksiyon ile tanımlanan sembol ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.

//AddNewsSymbol(Symbol);

 

//Alttaki fonksiyon ile tanımlanan anahtar kelime ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.

//AddNewsKeyword("KAP");

}

 

/// <summary>

/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir

/// </summary>

public override void OnInitCompleted()

{

 

}

 

/// <summary>

/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.

/// </summary>

public override void OnTimer()

{

 

}

 

/// <summary>

/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.

/// </summary>

/// <param name="newsId">Gelen haberin id'si</param>

/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>

public override void OnNewsReceived(int newsId, List<string> relatedSymbols)

{

 

}

 

/// <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 barData1 = GetBarData(Symbol1, SymbolPeriod1);

var ohlcData1 = GetSelectedValueFromBarData(barData1, OHLCType.Close);

if (CrossAbove(ema, ott, 0, 0) && parabolicSar.Value[0][parabolicSar.CurrentIndex] < ohlcData1)

{

SendMarketOrder(Symbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession:false);

}

if (CrossBelow(ema, ott, 0, 1) && parabolicSar.Value[0][parabolicSar.CurrentIndex] > ohlcData1)

{

SendPLMOrder(Symbol1, OrderQuantity2, OrderSide.Sell);

}

if (CrossAbove(ema, ott, 0, 0) && parabolicSar.Value[0][parabolicSar.CurrentIndex] < ohlcData1)

{

SendMarketCloseShortOrder(Symbol1, OrderQuantity3);

}

if (CrossBelow(ema, ott, 0, 0) && parabolicSar.Value[0][parabolicSar.CurrentIndex] > ohlcData1)

{

SendShortSalePLMOrder(Symbol1, OrderQuantity4);

}

 

}

 

/// <summary>

/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.

/// </summary>

/// <param name="barData">Emrin son durumu</param>

public override void OnOrderUpdate(IOrder order)

{

}

 

/// <summary>

/// Strateji durdurulduğunda bu fonksiyon tetiklenir.

/// </summary>

public override void OnStopped()

{

}

}

}

0 0

Merhabalar,

Bahsedilen al sat durumlarına göre yazdığınız formülde sadece sat koşulunuzda,

if (CrossBelow(ema, ott, 0, 1) && parabolicSar.Value[0][parabolicSar.CurrentIndex] > ohlcData1) 

kısmının,

if (CrossBelow(ema, ott, 0, 0) olması gerekmektedir.

Bunun haricinde istenilen sonuçları alamadım dediğiniz yerler için, dilerseniz egitim@matriksdata.com adresine daha detaylı bir şekilde mail atarsanız kontrol sağlayabiliriz.

İyi çalışmalar.

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.



4,274 soru
4,248 cevap
2,933 yorum
3,175 kullanıcı