Merhabalar,
Aşağıda paylaşmış olduğum sistemi AcigaSatisYapilsin kısmını İŞARETLEMEDEN ve HangiİslemleBaslasin kısmını da SATİS yaparsanız, dilediğiniz gibi kullanabilirsiniz.

***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 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 SablonAcigaSatisVade : MatriksAlgo
{
[SymbolParameter("FGARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
[Parameter(5)]
public int MovPeriod;
[Parameter(22)]
public int MovPeriod2;
[Parameter(3)]
public int Kaldirac;
[Parameter(6)]
public decimal TrailingStopLevel1;
[Parameter(6)]
public decimal StopLevel2;
[Parameter(6)]
public decimal TakeStopLevel3;
MOV mov;
MOV mov2;
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (CrossAbove(mov, mov2, 0, 0))
{
FX_Alis(Symbol, BuyOrderQuantity);
TrailingStopLoss(Symbol, SyntheticOrderPriceType.Percent, TrailingStopLevel1);
StopLoss(Symbol, SyntheticOrderPriceType.Percent, StopLevel2);
TakeProfit(Symbol, SyntheticOrderPriceType.Percent, TakeStopLevel3);
}
if (CrossBelow(mov, mov2, 0, 0))
{
FX_Satis(Symbol, SellOrderQuantity);
TrailingStopLoss(Symbol, SyntheticOrderPriceType.Percent, TrailingStopLevel1);
StopLoss(Symbol, SyntheticOrderPriceType.Percent, StopLevel2);
TakeProfit(Symbol, SyntheticOrderPriceType.Percent, TakeStopLevel3);
}
}
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);
WorkWithPermanentSignal(true);
if (HangiIslemleBaslasin == yon.Alis)
{
SendOrderSequential(true, Side.Buy);
}else if (HangiIslemleBaslasin == yon.Satis)
{
SendOrderSequential(true, Side.Sell);
}else
{
SendOrderSequential(true, Side.All);
}
SendOrderSequentialForShort(true, Side.All);
SetLeverage(Symbol, Kaldirac);
SetLeverageType(Symbol, true);
}
[Parameter(true)]
public bool AcigaSatisYapilsin;
[Parameter(false)]
public bool AksamSeansiniDahilEt;
[Parameter(yon.Farketmez)]
public yon HangiIslemleBaslasin;
public enum yon
{
Alis, Satis, Farketmez
}
public void FX_Alis(string sembol, decimal quantity)
{
decimal _quantity = 0;
if (LastOrderSide.Obj != Side.Buy)
{
if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
{
SendMarketOrder(Symbol, quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = quantity;
}else
{
if (LastOrderSideForShort.Obj == Side.All)
{
SendMarketOrder(Symbol, quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = quantity;
}else
{
SendMarketOrder(Symbol, quantity * 2, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
_quantity = quantity * 2;
}
}
Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSide.Obj = Side.Buy;
LastOrderSideForShort.Obj = Side.Buy;
}
}
public void FX_Satis(string sembol, decimal quantity)
{
decimal _quantity = 0;
if (LastOrderSide.Obj != Side.Sell)
{
if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
{
SendMarketOrder(Symbol, quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = quantity;
}else
{
if (LastOrderSideForShort.Obj == Side.All)
{
SendMarketOrder(Symbol, quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = quantity;
}else
{
SendMarketOrder(Symbol, quantity * 2, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
_quantity = quantity * 2;
}
}
Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
LastOrderSide.Obj = Side.Sell;
LastOrderSideForShort.Obj = Side.Sell;
}
}
public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
{
if (sOrder.EnableOrderSending)
{
LastOrderSide.Obj = Side.All;
Debug("Sentetik emir tetiklendi");
}
}
}
}
İyi çalışmalar.
Hocam emeğinize sağlık lakin farklı bir indkatör ile strateji oluşturduğumuzda nasıl kullanacağız ?
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 alpha600 : 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("ZIL_USDT_FBIN")] public string Symbol1; [Parameter(SymbolPeriod.Min)] public SymbolPeriod SymbolPeriod1; [Parameter(4)] public decimal Alphatrend_iqCoeff1; [Parameter(1)] public int Alphatrend_iqPeriod1; [Parameter(Momentum.MFI)] public Momentum Alphatrend_iqMomentum1; [Parameter(false)] public bool IsReduceOnly1; [Parameter(20)] public decimal Leverage1; [Parameter(false)] public bool IsReduceOnly2; [Parameter(CryptoLeverageType.Cross)] public CryptoLeverageType LeverageType2; [Parameter(5000)] public decimal OrderQuantity3; [Parameter(false)] public bool IsReduceOnly3; [Parameter(5000)] public decimal OrderQuantity4; [Parameter(true)] public bool IsReduceOnly4; [Parameter(false)] public bool IsReduceOnly5; [Parameter(20)] public decimal Leverage5; [Parameter(false)] public bool IsReduceOnly6; [Parameter(CryptoLeverageType.Cross)] public CryptoLeverageType LeverageType6; MatriksIndicator AlphaTrend_IQ; public override void OnInit() { AlphaTrend_IQ = new AlphaTrend_IQ(); AlphaTrend_IQ.SetIndicatorParameters("Coeff", Alphatrend_iqCoeff1); AlphaTrend_IQ.SetIndicatorParameters("Period", Alphatrend_iqPeriod1); AlphaTrend_IQ.SetIndicatorParameters("Momentum", Alphatrend_iqMomentum1); RegisterUserIndicator(AlphaTrend_IQ, Symbol1, SymbolPeriod1, OHLCType.Close, 5); SetLeverage(Symbol1, Leverage1); SetLeverageType(Symbol1, LeverageType2); SetLeverage(Symbol1, Leverage5); SetLeverageType(Symbol1, LeverageType6); SendOrderSequential(true, Side.Buy); WorkWithPermanentSignal(true); //Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir. // SetTimerInterval(3600); //Alttaki fonksiyon ile tanımlanan sembol ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir. //AddNewsSymbol(Symbol); //Alttaki fonksiyon ile tanımlanan anahtar kelime ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir. //AddNewsKeyword("KAP"); } /// <summary> /// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir /// </summary> public override void OnInitCompleted() { } /// <summary> /// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir. /// </summary> public override void OnTimer() { } /// <summary> /// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir. /// </summary> /// <param name="newsId">Gelen haberin id'si</param> /// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param> public override void OnNewsReceived(int newsId, List<string> relatedSymbols) { } /// <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(BarDataEventArgs barData) { var barData1 = GetBarData(Symbol1, SymbolPeriod1); if (CrossBelow(AlphaTrend_IQ, barData1, OHLCType.Close, 0)) { SendMarketOrder(Symbol1, OrderQuantity3, OrderSide.Buy, includeAfterSession:false, isReduceOnly : IsReduceOnly3); } if (CrossAbove(AlphaTrend_IQ, barData1, OHLCType.Close, 0)) { SendMarketOrder(Symbol1, OrderQuantity4, OrderSide.Sell, includeAfterSession:false, isReduceOnly : IsReduceOnly4); } } /// <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) { } /// <summary> /// Strateji durdurulduğunda bu fonksiyon tetiklenir. /// </summary> public override void OnStopped() { } } }bu benim stratejim istediğim ise;
* Long işlemi gerçeklerştiğinde %1 kar olduğunda poz kapanacak ve Short sinyali beklenecek.
* Short işlemi gerçekleştiğinde %1 kar olduğunda poz kapanacak ve Long işlemi beklenecek.