Merhaba,
Sentetik emirler tanımlandığı andaki fiyatı baz almaktadır. ( ortalama maliyeti baz almaz öyle denk gelmiş olabilir)
Şöyle birşey yapılabilir alış emriniz gerçekleştikten sonra %1 yukarısına satış limit emri gönderilebilir.
tüm sorularınız için aşağıdaki stratejiyi inceleyebilirsiniz.
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;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
namespace Matriks.Lean.Algotrader
{
public class mmk : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Day)]
public SymbolPeriod SymbolPeriod;
[Parameter(1)]
public decimal OrderQuantity;
[Parameter(3)]
public int Period;
[Parameter(2)]
public decimal Percentage;
MOST most;
bool StratejiAktifMI = true;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
WorkWithPermanentSignal(true);
SendOrderSequential(true, Side.All);
sinir = UstUsteEmirSiniri;
}
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 override void OnDataUpdate(BarDataCurrentValues bd)
{
if (alisKosulu && DateTime.Now>zaman && sinir>0)
{
// alış emri
sinir--;
zaman = DateTime.Now.AddMinutes(5);
Debug("Alış emri gönderildi alış sinyali 5DK kilitlendi");
}
if (satisKosulu){
// satış emri
zaman = DateTime.Now;
sinir++;
}
}
DateTime zaman = DateTime.Now.AddDays(5600);
int UstUsteEmirSiniri = 5;
int sinir;
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
if (order.Side.Obj == Side.Buy)
{
var gerçekleşenFiyat=order.Price;
var yuzde1fazlasi=FX_FiyatAyarla(gerçekleşenFiyat*0.01m);
SendLimitOrder(Symbol,order.LastPx,OrderSide.Sell,yuzde1fazlasi);
Debug("Alış emri gerçekleşti yüzde bir yykarısına satış emri gönderildi.");
}
}
if (order.OrdStatus.Obj == OrdStatus.Rejected)
{
if (order.Side.Obj == Side.Buy)
{
zaman = DateTime.Now;
sinir++;
}
}
}
public decimal FX_LotAyarla(decimal quantity)
{
return Math.Floor(quantity / quantityStep) * quantityStep;
}
public decimal FX_FiyatAyarla(decimal price)
{
return Math.Floor(price / priceStep) * priceStep;
}
public decimal FX_Sonfiyat(string sembol)
{
return GetSelectedValueFromBarData(GetBarData(sembol, SymbolPeriod), OHLCType.Close);
}
}
}