Bu strateji tavanda olan sembol için koşul sağlandığında satış emri göndermektedir.
Koşul 1-> Derinlik penceresinde alış 1. kademede bekleyen lotların toplamı belirlenen miktarın aşağısında olduğunda satış emri gönderilir.
veya
Koşul 2-> Tavanda oldu süre içerisinde 1. kademede bekleyen en yüksek değerin belirlenen oranda gerilemesi durumda satış emri gönderilir.
SabitMIYuzdeMI seçimi aktif ise
Alışta bekleyen miktar belirlediğiniz değerin (SabitMiktar) altına düşerse piyasadan sat emri gönderilir.
SabitMIYuzdeMI seçimi pasif ise
Bekleyen emir miktarının sürekli en yüksek değeri ölçülür.
En yüksek değerin belli bir yüzde(Yuzde) altına düşmesi durumunda piyasadan sat emri gönderilir.
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.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
/*
Bu strateji tavanda olan sembol için koşul sağlandığında satış emri göndermektedir.
Koşul 1-> Derinlik penceresinde alış 1. kademede bekleyen lotların toplamı belirlenen miktarın aşağısında olduğunda satış emri gönderilir.
veya
Koşul 2-> Tavanda oldu süre içerisinde 1. kademede bekleyen en yüksek değerin belirlenen oranda gerilemesi durumda satış emri gönderilir.
SabitMIYuzdeMI seçimi aktif ise
Alışta bekleyen miktar belirlediğiniz değerin (SabitMiktar) altına düşerse piyasadan sat emri gönderilir.
SabitMIYuzdeMI seçimi pasif ise
Bekleyen emir miktarının sürekli en yüksek değeri ölçülür.
En yüksek değerin belli bir yüzde(Yuzde) altına düşmesi durumunda piyasadan sat emri gönderilir.
*/
namespace Matriks.Lean.Algotrader
{
public class TavandaDerinlikKontrolu : 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("GARAN")]
public string Symbol;
[Parameter(1)]
public decimal SatilacakAdet;
[Parameter(true)]
public bool SabitMIYuzdeMI;
[Parameter(100000)]
public decimal SabitMiktar;
[Parameter(40)]
public decimal Yuzde;
[Output]
public decimal EnYuksek = decimal.MinValue;
[Output]
public decimal BekleyenMiktar;
[Output]
public decimal Tavan;
[Output]
public decimal Close;
[Output]
public bool StratejiAktifMI = true;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod.Min120);
AddSymbolMarketData(Symbol);
AddSymbolMarketDepth(Symbol);
WorkWithPermanentSignal(true);
SendOrderSequential(true, Side.Sell);
SetTimerInterval(1);
}
public override void OnTimer()
{
if (StratejiAktifMI)
{
var barDataModel = GetBarData(Symbol, SymbolPeriod.Min120);
var depths = GetMarketDepth(Symbol);
if (depths? .AskRows == null || depths.AskRows.Count < 1 ||
depths? .BidRows == null || depths.BidRows.Count < 1)
{
Debug("Derinlik verisi bekleniyor.");
return ;
}
BekleyenMiktar = depths.BidRows[0].Size;
Close = Ref(barDataModel, OHLCType.Close, 0);
if (BekleyenMiktar>EnYuksek)
{
EnYuksek = BekleyenMiktar;
}
if (Close == Tavan)
{
if (SabitMIYuzdeMI == true && BekleyenMiktar<SabitMiktar && BekleyenMiktar != 0)
{
Debug("Bid : " + BekleyenMiktar);
Debug("Satış Emri Gönderildi");
SendMarketOrder(Symbol, SatilacakAdet, OrderSide.Sell);
StratejiAktifMI = false;
}else if (SabitMIYuzdeMI == false && BekleyenMiktar<EnYuksek * (100 - Yuzde) / 100 && BekleyenMiktar != 0)
{
Debug("Bid : " + BekleyenMiktar);
Debug("Satış Emri Gönderildi");
SendMarketOrder(Symbol, SatilacakAdet, OrderSide.Sell);
StratejiAktifMI = false;
}
}else
{
EnYuksek = decimal.MinValue;
}
}
}
public override void OnInitComplated()
{
Tavan = GetMarketData(Symbol, SymbolUpdateField.LimitUp);
}
}
}