Merhabalar,
Maalesef direkt olarak bir yolu yoktur.
Her bir method için kullanmak istediğiniz explorer koşulundaki parametreleri sistem içerisine eklemeniz gerekmektedir.
Örneğin, hazır explorer listesinden Golden Cross' stratejiye çevirmek istiyorsunuz.
Bunu yapabilmek için iki yol kullanabilirsiniz.
- Bunlardan birincisi explorer içerisinde hangi indikatörün kullanıldığını bilip (basit formüller için) algoritma sihirbazından hazırlayabilirsiniz.
Bu yöntem için lütfen aşağıdaki linki inceleyiniz.
https://destek.matriksdata.com/?qa=4438/iq-algoritma-sihirbaz%C4%B1n%C4%B1-nas%C4%B1l-kullan%C4%B1r%C4%B1z
- Bir diğeri ise IQ Algo--> Yeni Strateji Oluştur diyebilirsiniz.
Şablon ve Şablon Örnekleri kısmından Yeni seçeneğini seçip stratejinize isim verebilirsiniz.

Bu işlemleri yaptıktan sonra önünüze şablon bir yapı gelecektir.
Bu şablon yapıya explorer taramasında kullanılan parametreleri kopyala yapıştır olarak eklemeniz gerekmektedir.
Golden Cross iki hareketli ortalamanın kesişimini baz alan bir taramadır.
Bu sebeple sistem içinde bulunan hareketli ortalamanın parametrelerini kopyalayıp isimlendirdiğim stratejiye yapıştırıyorum.

Sonrasında aynı işlemi OnInit() methodu içerisinde bulunan mov tanımlamaları içeren iki satırı da kopyalayıp stratejimin OnInit() methodu içerisine ekliyorum.

Son olarak ise OnExplorer() methodu içerisinde bulunan if satırını stratejimdeki OnDataUpdate() methoduna ekliyorum.

Bütün bu işlemler bittikten sonra stratejiniz için bir koşul daha oluşturmanız gerekmektedir.
Örneğin Golden Cross taraması iki hareketli ortalama için elde edilen bir AL koşuludur.
Bir stratejinin oluşabilmesi için ise AL ile beraber SAT koşulunun da olması gerekir, bu sebeple bir tane de SAT koşulu oluşturmamız gerekmektedir.
Hareketli ortalamanın yukarı kesmesi AL koşulu olarak tanımlanıyorsa, aşağı kesmesi ise SAT koşulu olarak tanımlanabilir.
OnDataUpdate methodunu aşağıdaki gibi tamamlayabilirsiniz.
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
if (CrossAbove(mov, mov2))
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
}
if (CrossBelow(mov, mov2))
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
}
}
Tamamladıktan sonra yapmanız gereken son iki işlem kaldı.
Bunlardan ilki SendMarket içerisinde tanımladığınız BuyOrderQuantitiy ve SellOrderQuantity değişkenleridir. Bu değişkenleri indikatör parametreleri eklediğiniz yerde tanıtmanız gerekmektedir.
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
Bunları tanıttıktan sonra ise OnInit() methodu içerisine aşağıdaki satırı eklemeniz gerekmektedir.
WorkWithPermanentSignal(true);
Aşağıda startejiye çevrilmiş hali mevcuttur.
Dilerseniz inceleyiniz.
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 deneme1 : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
[Parameter(50)]
public int MovPeriod1;
[Parameter(200)]
public int MovPeriod2;
MOV mov;
MOV mov2;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod1, MovMethod.Simple);
mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Simple);
SendOrderSequential(true);
WorkWithPermanentSignal(true);
}
public override void OnInitCompleted()
{
}
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
if (CrossAbove(mov, mov2))
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
}
if (CrossBelow(mov, mov2))
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
}
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
}
}
public override void OnStopped()
{
}
}
}
İyi çalışmalar.