Merhaba, istediğiniz stratejiyi aşağıda paylaştığım linkten indirip çift tıklayarak MatriksIQ'ya alabilirsiniz.
*Strateji alış koşulu gerçekleştiğinde(belirtmediğiniz için most kullandım) parametre olarak belirttiğiniz bakiye ve o andaki son fiyat ile alış adedini hesaplayıp emir gönderir. Satış koşulu gerçekleştiğinde de alış adediyle emir gönderilir.
Stratejinizi gerçek hesapta kullanmadan önce test hesabında doğru çalıştığından emin olana kadar test ediniz.
https://destek.matriksdata.com/?qa=blob&qa_blobid=15401409114700118914
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 ViopAlSat : 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("X30YVADE")]
public string Symbol1;
[Parameter(SymbolPeriod.Min15)]
public SymbolPeriod SymbolPeriod1;
[Parameter(100000)]
public decimal Bakiye;
[Parameter(3)]
public int MostPeriod1;
[Parameter(2)]
public decimal MostPercentage1;
[Parameter(MovMethod.E)]
public MovMethod MostMethod1;
[Parameter(true)]
public bool KalıcıSinyal;
MOST most;
public override void OnInit()
{
most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MostPeriod1, MostPercentage1, MostMethod1);
SendOrderSequential(true, Side.Buy);
WorkWithPermanentSignal(KalıcıSinyal);
}
int Pozisyon = 2;
decimal IslemAdedi = 0;
/// <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(BarDataCurrentValues barDataCurrentValues)
{
var close = barDataCurrentValues.LastUpdate.Close;
if (CrossAbove(most, most, 0, 1) && Pozisyon == 2)
{
IslemAdedi = Math.Floor(Bakiye / (close * 10));
if (IslemAdedi > 0)
{
SendMarketOrder(Symbol1, IslemAdedi, OrderSide.Buy);
Debug("Alış Emri Verildi.");
Pozisyon = 1;
}else
Debug("Bakiyeniz yetersiz.");
}
if (CrossBelow(most, most, 0, 1) && Pozisyon == 1 && IslemAdedi > 0)
{
SendMarketOrder(Symbol1, IslemAdedi, OrderSide.Sell);
Debug("Satış Emri Verildi.");
IslemAdedi = 0;
Pozisyon = 2;
}
}
/// <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)
{
}
}
}