Merhaba, istediğiniz işlemin örneklerini daha önceden hem MatriksIQ teknik dokümanında hem de forumda verdik.Teknik dokümanımızı detaylı incelemenizi tavsiye ederiz. Özellikle kodlama kısmında kullanıcılarımıza yardımcı olacak içerikler bulunmakta.
MatriksIQ teknik dokümanının linki (İstediğiniz örnek "Nasıl Yapılır/ SSS" başlığının altındadır"):
https://matriksiq.matriksdata.com/Algo_Trader_IQ.pdf
Forumda benzer bir soruya verdiğimiz örnek:
https://destek.matriksdata.com/?qa=24/stratejiyi-2-farklı-periyotta-çalıştırabilir-miyim&show=24#q24
Sizin için hazırladığımız CrossMov stratejisinin düzenlenmiş hali :
Not:Strateji oluştururken, oluşturduğunuz strateji ile bizim paylaştığımız strateji adlarının aynı olmasına dikkat ediniz.
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 CrossMov2 : 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("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriodAl;
[Parameter(SymbolPeriod.Min60)]
public SymbolPeriod SymbolPeriodSat;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
[Parameter(5)]
public int MovPeriodAl;
[Parameter(22)]
public int MovPeriodAl2;
[Parameter(5)]
public int MovPeriodSat;
[Parameter(22)]
public int MovPeriodSat2;
// indikator tanımları.
MOV mov, mov2, mov3, mov4;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriodAl);
mov = MOVIndicator(Symbol, SymbolPeriodAl, OHLCType.Close, MovPeriodAl, MovMethod.Exponential);
mov2 = MOVIndicator(Symbol, SymbolPeriodAl, OHLCType.Close, MovPeriodAl2, MovMethod.Exponential);
AddSymbol(Symbol, SymbolPeriodSat);
mov3 = MOVIndicator(Symbol, SymbolPeriodSat, OHLCType.Close, MovPeriodSat, MovMethod.Exponential);
mov4 = MOVIndicator(Symbol, SymbolPeriodSat, OHLCType.Close, MovPeriodSat2, MovMethod.Exponential);
WorkWithPermanentSignal(true);
SendOrderSequential(true);
}
/// <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)
{
if (barData.PeriodInfo.Equals(SymbolPeriodAl.ToPeriodInfo()))
{
if (CrossAbove(mov, mov2))
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
Debug("Alış Emri Gönderildi");
Debug("Alış sinyallerinin alındığı symbol periodu : " + barData.PeriodInfo + "\n");
}
}
if (barData.PeriodInfo.Equals(SymbolPeriodSat.ToPeriodInfo()))
{
if (CrossBelow(mov3, mov4))
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
Debug("Satış Emri Gönderildi");
Debug("Satış sinyallerinin alındığı symbol periodu : " + barData.PeriodInfo + "\n");
}
}
}
}
}
İyi çalışmalar