0 beğenilme 0 beğenilmeme
40 kez görüntülendi
using System;

using System.Collections.Generic;

using System.Linq;

using Matriks;

using Matriks.Data.Symbol;

using Matriks.Data.Tick;

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;

using Matriks.Enumeration;

using Matriks.IntermediaryInstitutionAnalysis.Enums;

using Newtonsoft.Json;

 

namespace Matriks.Lean.Algotrader

{

public class mostlu_x100lu : MatriksAlgo

{

[SymbolParameter("XU030")]

public string Symbol1;

 

[SymbolParameter("XU100")]

public string Symbol2;

 

[SymbolParameter("X30YVADE")]

public string OrderSymbol1;

 

[Parameter(SymbolPeriod.Min60)]

public SymbolPeriod SymbolPeriod1;

 

[Parameter(Side.All)]

public Side orderSide;

 

[Parameter(13)]

public int RsiPeriod1;

 

[Parameter(2)]

public int MostPeriod1;

 

[Parameter(2)]

public decimal MostPercentage1;

 

[Parameter(MovMethod.ZL)]

public MovMethod MostMovMethod1;

 

[Parameter(3)]

public int WilliamsrPeriod1;

 

[Parameter(3)]

public int WilliamsrPeriod2;

 

[Parameter(2)]

public int MostPeriod2;

 

[Parameter(2)]

public decimal MostPercentage2;

 

[Parameter(MovMethod.ZL)]

public MovMethod MostMovMethod2;

 

[Parameter(13)]

public int RsiPeriod2;

 

[Parameter(1)]

public decimal OrderQuantity1;

 

[Parameter(1)]

public decimal OrderQuantity2;

 

private RSI rsi;

private MOST most;

private WILLIAMSR willamsr;

private WILLIAMSR willamsr2;

private MOST most2;

private RSI rsi2;

 

// Trailing Stop Variables

private decimal trailingStopLevelBuy;

private decimal trailingStopLevelSell;

private bool isTrailingStopActiveBuy = false;

private bool isTrailingStopActiveSell = false;

 

public override void OnInit()

{

AddSymbol(OrderSymbol1, SymbolPeriod1);

rsi = RSIIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, RsiPeriod1);

most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MostPeriod1, MostPercentage1, MostMovMethod1);

willamsr = WILLIAMSRIndicator(Symbol1, SymbolPeriod1, WilliamsrPeriod1);

willamsr2 = WILLIAMSRIndicator(Symbol2, SymbolPeriod1, WilliamsrPeriod2);

most2 = MOSTIndicator(Symbol2, SymbolPeriod1, OHLCType.Close, MostPeriod2, MostPercentage2, MostMovMethod2);

rsi2 = RSIIndicator(Symbol2, SymbolPeriod1, OHLCType.Close, RsiPeriod2);

 

SendOrderSequential(true, orderSide);

WorkWithPermanentSignal(true);

}

 

public override void OnDataUpdate(BarDataEventArgs barData)

{

var barData1 = GetBarData(Symbol1, SymbolPeriod1);

var ohlcData1 = GetSelectedValueFromBarData(barData1, OHLCType.Close);

var barData2 = GetBarData(Symbol2, SymbolPeriod1);

var ohlcData2 = GetSelectedValueFromBarData(barData2, OHLCType.Close);

 

// Buy Signal Logic

if (rsi.Value[0][rsi.CurrentIndex] > 50m && most.Value[0][most.CurrentIndex] < ohlcData1

&& willamsr.Value[0][willamsr.CurrentIndex] > -30m && rsi2.Value[0][rsi2.CurrentIndex] > 50m

&& most2.Value[0][most2.CurrentIndex] < ohlcData2 && willamsr2.Value[0][willamsr2.CurrentIndex] > -30m)

{

SendMarketOrder(OrderSymbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession: false);

trailingStopLevelBuy = ohlcData1 * 1.005m; // Start trailing stop at 0.5% above entry

isTrailingStopActiveBuy = true;

}

 

// Short Sell Signal Logic

if (rsi.Value[0][rsi.CurrentIndex] < 50m && most.Value[0][most.CurrentIndex] > ohlcData2

&& willamsr.Value[0][willamsr.CurrentIndex] < -60m && rsi2.Value[0][rsi2.CurrentIndex] < 50m

&& willamsr2.Value[0][willamsr2.CurrentIndex] < -60m && most2.Value[0][most2.CurrentIndex] > ohlcData2)

{

SendMarketOrder(OrderSymbol1, OrderQuantity2, OrderSide.Sell, includeAfterSession: false);

trailingStopLevelSell = ohlcData2 * 0.995m; // Start trailing stop at 0.5% below entry

isTrailingStopActiveSell = true;

}

 

// Trailing Stop for Buy Position

if (isTrailingStopActiveBuy && ohlcData1 >= trailingStopLevelBuy)

{

trailingStopLevelBuy = Math.Max(trailingStopLevelBuy, ohlcData1 * 0.93m); // Adjust trailing stop to 7% below peak

}

if (isTrailingStopActiveBuy && ohlcData1 <= trailingStopLevelBuy)

{

SendMarketOrder(OrderSymbol1, OrderQuantity1, OrderSide.Sell, includeAfterSession: false);

isTrailingStopActiveBuy = false;

}

 

// Trailing Stop for Short Sell Position

if (isTrailingStopActiveSell && ohlcData2 <= trailingStopLevelSell)

{

trailingStopLevelSell = Math.Min(trailingStopLevelSell, ohlcData2 * 1.07m); // Adjust trailing stop to 7% above peak

}

if (isTrailingStopActiveSell && ohlcData2 >= trailingStopLevelSell)

{

SendMarketOrder(OrderSymbol1, OrderQuantity2, OrderSide.Buy, includeAfterSession: false);

isTrailingStopActiveSell = false;

}

 

// Re-enter After Stop Trigger for Buy

if (!isTrailingStopActiveBuy && ohlcData1 <= trailingStopLevelBuy * 0.996m

&& rsi.Value[0][rsi.CurrentIndex] > 50m && most.Value[0][most.CurrentIndex] < ohlcData1

&& willamsr.Value[0][willamsr.CurrentIndex] > -30m)

{

SendMarketOrder(OrderSymbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession: false);

trailingStopLevelBuy = ohlcData1 * 1.005m; // Restart trailing stop

isTrailingStopActiveBuy = true;

}

 

// Re-enter After Stop Trigger for Short Sell

if (!isTrailingStopActiveSell && ohlcData2 >= trailingStopLevelSell * 1.004m

&& rsi.Value[0][rsi.CurrentIndex] < 50m && most.Value[0][most.CurrentIndex] > ohlcData2

&& willamsr.Value[0][willamsr.CurrentIndex] < -60m)

{

SendMarketOrder(OrderSymbol1, OrderQuantity2, OrderSide.Sell, includeAfterSession: false);

trailingStopLevelSell = ohlcData2 * 0.995m; // Restart trailing stop

isTrailingStopActiveSell = true;

}

}

 

public override void OnOrderUpdate(IOrder order)

{

// Handle order updates

}

 

public override void OnStopped()

{

// Cleanup logic

}

}

}
Algoritmik Trading kategorisinde (14 puan) tarafından | 40 kez görüntülendi

Bu soruya cevap vermek için lütfen giriş yapınız veya kayıt olunuz.

Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



8,377 soru
8,332 cevap
4,699 yorum
17,758 kullanıcı