Hata kodu CS1503
- Soruldu
- Kategori
- Algoritmik Trading
- Görüntülenme
- 419 görüntülenme
- Durum
- Cevaplandı
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 LXSALGO4_5 : MatriksAlgo
{
// Strateji parametreleri
[SymbolParameter("XU100")]
public string Symbol1;
[Parameter(SymbolPeriod.Min15)]
public SymbolPeriod SymbolPeriod1;
[Parameter(Side.Buy)]
public Side orderSide;
[Parameter(14)]
public int AdxPeriod1;
[Parameter(14)]
public int RsiPeriod1;
[Parameter(50)]
public int SmaPeriod1;
[Parameter(10)]
public int CustomindicatorstestPeriod1;
[Parameter(0.0005)]
public decimal CustomindicatorstestFactor1;
[Parameter(1)]
public decimal OrderQuantity1;
[Parameter(1)]
public decimal OrderQuantity2;
[Parameter(1)]
public decimal OrderQuantity3;
[Parameter(1)]
public decimal OrderQuantity4;
// Göstergeler
ADX adx;
RSI rsi;
SMA sma;
MatriksIndicator CustomIndicatorsTEST;
// Kademeli satış için değişkenler
private Dictionary<string, decimal> buyPrices = new Dictionary<string, decimal>(); // Gerçekleşen alım fiyatlarını saklamak için
public override void OnInit()
{
adx = ADXIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, AdxPeriod1);
rsi = RSIIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, RsiPeriod1);
sma = SMAIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, SmaPeriod1);
CustomIndicatorsTEST = new CustomIndicatorsTEST();
CustomIndicatorsTEST.SetIndicatorParameters("Period", CustomindicatorstestPeriod1);
CustomIndicatorsTEST.SetIndicatorParameters("Factor", CustomindicatorstestFactor1);
RegisterUserIndicator(CustomIndicatorsTEST, Symbol1, SymbolPeriod1, OHLCType.Close, 5);
SendOrderSequential(false);
WorkWithPermanentSignal(true);
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (adx.Value[0][adx.CurrentIndex] < 30m && CrossAbove(CustomIndicatorsTEST, sma, 1, 0))
{
SendMarketOrder(Symbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession:false);
}
if (rsi.Value[0][rsi.CurrentIndex] < 30m && (adx.Value[0][adx.CurrentIndex] < 20m))
{
SendMarketOrder(Symbol1, OrderQuantity4, OrderSide.Buy, includeAfterSession:false);
}
if (rsi.Value[0][rsi.CurrentIndex] > 85m && CrossBelow(CustomIndicatorsTEST, sma, 0, 0))
{
SendMarketOrder(Symbol1, OrderQuantity2, OrderSide.Sell, includeAfterSession:false);
}
if (CrossBelow(CustomIndicatorsTEST, sma, 0, 0))
{
SendMarketOrder(Symbol1, OrderQuantity3, OrderSide.Sell, includeAfterSession:false);
}
}
public override void OnOrderUpdate(OrderEventArgs args)
{
}
public override void OnOrderFilled(OrderEventArgs args)
{
if (args.Order.OrderSide == Side.Buy) // Eğer gerçekleşen emir bir alım emriyse
{
decimal buyPrice = args.Order.Price; // Gerçekleşen alım fiyatı
decimal quantity = args.Order.Amount; // Gerçekleşen miktar
string orderId = args.Order.OrderId; // Emir ID'si
// Alım fiyatını ve miktarını sakla
buyPrices[orderId] = buyPrice;
// Kademeli satış için fiyatları hesapla
decimal sellPrice1x = buyPrice * 1m; // 1x katı
decimal sellPrice3x = buyPrice * 3m; // 3x katı
decimal sellPrice5x = buyPrice * 5m; // 5x katı
// Satış adetlerini hesapla (toplam miktarı 3'e böl)
decimal sellQuantity1x = Math.Floor(quantity / 3m); // 33%
decimal sellQuantity3x = Math.Floor(quantity / 3m); // 33%
decimal sellQuantity5x = quantity - (sellQuantity1x + sellQuantity3x); // Kalan miktar (34%)
// Kademeli satış emirlerini yerleştir
PlaceSellOrders(sellPrice1x, sellQuantity1x);
PlaceSellOrders(sellPrice3x, sellQuantity3x);
PlaceSellOrders(sellPrice5x, sellQuantity5x);
}
}
private void PlaceSellOrders(decimal price, decimal quantity)
{
SendOrder(Symbol1, quantity, price, Side.Sell, OrdType.Limit, TimeInForce.Day, TransactionType.Normal, ChartIcon.None, null, null, BridgeTriggerType.None, null, 0m, 0m, 0m, 0m, 0m, false, false, null, MobileNotificationActionType.NoAction, null, false);
}
public override void OnStopped()
{
}
}
}

