Merhaba,
Çift taraflı işlem yapmak için bazı kontrollerin eklenmesi gerekir. Aşağıdaki stratejiyi kullanabilirsiniz.
Aşağıdaki yapıyı algoritma sihirbazı ile oluşturduğunuz diğer stratejilere de ekleyebilirsiniz.
Linkteki dosyayı indirip çift tıklayarak kullanıcı stratejilerine eklenmesini sağlayabilirsiniz.
https://destek.matriksdata.com/?qa=blob&qa_blobid=7759284807832732816
***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using System.Windows.Media;
using Matriks.Engines;
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 SuperTrendFuture : 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 SymbolPeriod;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
[Parameter(10)]
public int SuperPeriod;
[Parameter(3)]
public int Coeff;
// indikator tanımları.
SuperTrend superTrend;
[Parameter(3)]
public int KaldiracOrani;
[Parameter(true)]
public bool AcigaSatisYapilsin;
/// <summary>
/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
/// </summary>
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
superTrend = SuperTrendIndicator(Symbol, SymbolPeriod, SuperPeriod, Coeff);
WorkWithPermanentSignal(true);
if (AcigaSatisYapilsin)
{
SendOrderSequential(true, Side.All);
SendOrderSequentialForShort(true, Side.All);
}else
{
SendOrderSequential(true, Side.Buy);
}
// kaldıraç oranı
SetLeverage(Symbol, KaldiracOrani);
// kaldıraç tipi - true isolated, false cross
SetLeverageType(Symbol, true);
}
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
var barDataModel = GetBarData();
if (CrossAbove(barDataModel, superTrend, OHLCType.Close) && LastOrderSide.Obj != Side.Buy)
{
if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
}else
{
SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy);
}
Debug("Alış Emri Gönderildi");
}
if (CrossBelow(barDataModel, superTrend, OHLCType.Close) && LastOrderSide.Obj != Side.Sell)
{
if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
}else
{
SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell);
}
Debug("Satış Emri Gönderildi");
}
}
}
}