Merhaba, sizler için bir örnek hazırladım.
Lütfen bu örneği önce deneme hesabında çalıştırınız.
Doğru çalıştığına emin olduktan sonra gerçek hesapta ufak miktarlarla test ediniz.
Doğru çalıştığına emin olmadan kullanmayınız.
Aşağıda ki linkten indirebilirsiniz.
https://destek.matriksdata.com/?qa=blob&qa_blobid=11470271315381105455
Kod örneği aşağıdadır.
İyi çalışmalar. Kolay gelsin.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks;
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 limit_emir_sentetik : MatriksAlgo
{
[SymbolParameter("THYAO")]
public string Symbol1;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod1;
[Parameter(3)]
public int MostPeriod1;
[Parameter(2)]
public decimal MostPercentage1;
[Parameter(MovMethod.E)]
public MovMethod MostMovMethod1;
[Parameter(1)]
public decimal adet;
[Parameter(3)]
public decimal iz_suren_stop;
MOST most;
public override void OnInit()
{
most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MostPeriod1, MostPercentage1, MostMovMethod1);
SendOrderSequential(true, Side.Buy);
WorkWithPermanentSignal(true);
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
var barData1 = GetBarData(Symbol1, SymbolPeriod1);
var son_fiyat = GetSelectedValueFromBarData(barData1, OHLCType.Close);
// " LastOrderSide.Obj != Side.Buy " Bir önceki işlem alış değilse demektir bu.
// " LastOrderSide.Obj != Side.Sell " Bir önceki işlem satış değilse demektir bu.
// Bu sayede koşul devamlı tetiklenmez ve sentetik emirleriniz düzgün çalışır
if (CrossAbove(most, most, 1, 0) && LastOrderSide.Obj != Side.Buy)
{
SendLimitOrder(Symbol1, adet, OrderSide.Buy, son_fiyat, includeAfterSession:false);
}
if (CrossBelow(most, most, 1, 0) & LastOrderSide.Obj != Side.Sell)
{
SendLimitOrder(Symbol1, adet, OrderSide.Sell, son_fiyat, includeAfterSession:false);
}
}
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
if (order.Side.Obj == Side.Buy) // alış emri gerçekleştiyse.
{
TakeProfit(Symbol1, SyntheticOrderPriceType.Percent, iz_suren_stop, includeAfterSession:false);
StopLoss(Symbol1, SyntheticOrderPriceType.Percent, iz_suren_stop, includeAfterSession:false);
}
if (order.Side.Obj == Side.Sell) // satış emri gerçekleştiyse.
{
TakeProfit(Symbol1, SyntheticOrderPriceType.Percent, iz_suren_stop, includeAfterSession:false);
StopLoss(Symbol1, SyntheticOrderPriceType.Percent, iz_suren_stop, includeAfterSession:false);
}
}
}
}
}