Merhaba,
Algorima sihirbazında stratejinizi oluşturduktan sonra kod üzerinde küçük eklemelerle belirlenen tutara göre al sat yapması sağlanabilir.
Aşağıdaki örneği inceleyebilirsiniz // gerekli ..... // #gerekli yazan satırları kopyalayıp kendi stratejinize yapıştırıp alış koşuluna fx_alis() satış koşulunuza da fx_satis() fonksiyonunu eklemeniz yeterli olur.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
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;
//========================================== by KRIPEX ==========================================//
namespace Matriks.Lean.Algotrader
{
public class SablonTutaraGoreAlSat : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(3)]
public int Period;
[Parameter(2)]
public decimal Percentage;
MOST most;
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (CrossAbove(most, most, 1, 0))
{
// Gerekli - Tutara Göre
FX_Alis(Symbol);
// # Gerekli - Tutara Göre
}
if (CrossBelow(most, most, 1, 0))
{
// Gerekli - Tutara Göre
FX_Satis(Symbol);
// # Gerekli - Tutara Göre
}
}
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.Exponential);
WorkWithPermanentSignal(true);
SendOrderSequential(true, Side.Buy);
}
// Gerekli - Tutara Göre
[Parameter(50)]
public decimal Tutar;
public decimal Adet;
decimal priceStep, quantityStep = 1;
int exchangeID;
public override void OnInitComplated()
{
var symbolDetail = GetSymbolDetail(Symbol);
if (symbolDetail != null)
{
exchangeID = symbolDetail.ExchangeDetail.ExchangeID;
var close = FX_Sonfiyat(Symbol); ;
if (exchangeID != (int) ExchangeType.Ise && exchangeID != (int) ExchangeType.Viop)
{
priceStep = 1 / (decimal) Math.Pow(10, symbolDetail.DecimalCount);
quantityStep = 1 / (decimal) Math.Pow(10, symbolDetail.TradeFraction);
}else
{
priceStep = GetPriceStepForBistViop(Symbol, close);
}
}
}
public void FX_Alis(string sembol)
{
decimal _close = FX_Sonfiyat(sembol);
decimal _adet = FX_LotAyarla(Tutar / _close);
if (_adet > 0 && LastOrderSide.Obj != Side.Buy)
{
Adet = _adet;
SendMarketOrder(sembol, _adet, (OrderSide.Buy));
Debug("Alış sinyali oluştu. Sinyal fiyatı: " + _close + " - Adet: " + _adet);
}
}
public void FX_Satis(string sembol)
{
if (Adet >= 0 && LastOrderSide.Obj != Side.Sell)
{
SendMarketOrder(sembol, Adet, (OrderSide.Sell));
Debug("Satış sinyali oluştu. Sinyal fiyatı: " + FX_Sonfiyat(sembol) + " - Adet: " + Adet);
}
}
public decimal FX_LotAyarla(decimal quantity)
{
return Math.Floor(quantity / quantityStep) * quantityStep;
}
public decimal FX_Sonfiyat(string sembol)
{
return GetSelectedValueFromBarData(GetBarData(sembol, SymbolPeriod), OHLCType.Close);
}
// # Gerekli - Tutara Göre
}
}