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