ELİS ile birlikte strateji oluşturabilen var mı ?
- Soruldu
- Kategori
- Algoritmik Trading
- Görüntülenme
- 848 görüntülenme
- Durum
- Çözüldü
Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. 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.
Kabul edilen cevap
Merhabalar,
Dilerseniz aşağıdaki örneği 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.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
namespace Matriks.Lean.Algotrader
{
public class ElisOrnek : 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("BTC_USDT_FBIN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(0.005)]
public decimal BuyOrderQuantity;
[Parameter(0.005)]
public decimal SellOrderQuantity;
[Parameter(5)]
public int MovPeriod;
[Parameter(22)]
public int MovPeriod2;
// indikator tanımları.
MOV mov;
MOV mov2;
// Gerekli Elis
MatriksIndicator ELIS_IQ;
[Parameter(Gears.Standard)]
public Gears Gear;
public enum Gears
{
Conservative = 1, Standard = 2, Average = 3, Risky = 4, Agressive = 5
}
[Output]
public int KaldiracOrani = 3;
// #Gerekli Elis
public override void OnInit()
{
ELIS_IQ = new ELIS_IQ();
ELIS_IQ.SetIndicatorParameters("Gear", Gear);
ELIS_IQ.SetIndicatorParameters("Period", 50);
RegisterUserIndicator(ELIS_IQ, Symbol, SymbolPeriod.Min60, OHLCType.Close, 5);
AddSymbol(Symbol, SymbolPeriod);
mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);
SendOrderSequential(true);
WorkWithPermanentSignal(true);
// kaldıraç tipi - true isolated, false cross
SetLeverageType(Symbol, true);
}
public void FX_KaldiracAyarla()
{
if (KaldiracOrani != ELIS_IQ.CurrentValue)
{
KaldiracOrani = (int) ELIS_IQ.CurrentValue;
SetLeverage(Symbol, KaldiracOrani);
Debug("Kaldıraç oranı düzenlendi. " + KaldiracOrani);
}
}
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (barData.PeriodInfo == SymbolPeriod.ToPeriodInfo())
{
if (CrossAbove(mov, mov2) && LastOrderSide.Obj != Side.Buy)
{
FX_KaldiracAyarla();
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
Debug("Alış Emri Gönderildi");
}
if (CrossBelow(mov, mov2) && LastOrderSide.Obj != Side.Sell)
{
FX_KaldiracAyarla();
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
Debug("Satış Emri Gönderildi");
}
}
}
}
}
İyi çalışmalar.
Sitenin çalışması için gerekli çerezleri kullanıyoruz. Ziyaretleri anlamak için analitik çerezleri yalnızca onayınızla kullanırız. Çerez Politikası
Soru tam anlaşılamamış sanırım. (Ya da ben gönderdiğiniz ELIS örneğini anlayamadım.) Şöyle ki, siz order quantity'yi belirli bir değer girdikten sonra (örn. 1 BNB) ELİS kaldıracı ne yaparsa yapsın sistem 1 BNB alıp satacaktır. Kaldıraç 2x ise 0.5 BNB kadar bakiye kullanacaktır, kaldıraç 10x ise 0.1 BNB kadar bakiye kullanacaktır. Ama 1 BNB alıp satacaktır. Yani pozisyon büyüklüğünde bir değişiklik olmayacaktır. (BNB fiyatındaki değişim hariç.)
Benim aklıma şu geldi: Buy/sell order quantity'deki değeri 1x için yani kaldıraç olmadığı durum için girip, SendMarketOrder içindeki OrderQuantity'yi kaldıraç ile çarpmak? Aşağıda yaptım ama backtest falan yapıp denemedim ona göre. :D
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.Lean.Algotrader.AlgoBase; using Matriks.Lean.Algotrader.Models; using Matriks.Lean.Algotrader.Trading; namespace Matriks.Lean.Algotrader { public class I_ELIS : 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("BTC_USDT_FBIN")] public string Symbol; [Parameter(SymbolPeriod.Min5)] public SymbolPeriod SymbolPeriod; [Parameter(0.005)] public decimal BuyOrderQuantity; [Parameter(0.005)] public decimal SellOrderQuantity; [Parameter(5)] public int MovPeriod; [Parameter(22)] public int MovPeriod2; // indikator tanımları. MOV mov; MOV mov2; // Gerekli Elis MatriksIndicator ELIS_IQ; [Parameter(Gears.Standard)] public Gears Gear; public enum Gears { Conservative = 1, Standard = 2, Average = 3, Risky = 4, Agressive = 5 } [Output] public int KaldiracOrani = 3; ELIS elis; public override void OnInit() { elis = ELISIndicator(Symbol, SymbolPeriod, OHLCType.Close, 50, ElisGear.Standard); AddSymbol(Symbol, SymbolPeriod); mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential); mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential); SendOrderSequential(true); WorkWithPermanentSignal(true); // kaldıraç tipi - true isolated, false cross SetLeverageType(Symbol, true); } public void FX_KaldiracAyarla() { if (KaldiracOrani != ELIS_IQ.CurrentValue) { KaldiracOrani = (int) ELIS_IQ.CurrentValue; SetLeverage(Symbol, KaldiracOrani); Debug("Kaldıraç oranı düzenlendi. " + KaldiracOrani); } } public override void OnDataUpdate(BarDataEventArgs barData) { if (barData.PeriodInfo == SymbolPeriod.ToPeriodInfo()) { if (CrossAbove(mov, mov2) && LastOrderSide.Obj != Side.Buy) { FX_KaldiracAyarla(); SendMarketOrder(Symbol, BuyOrderQuantity*KaldiracOrani, OrderSide.Buy); Debug("Alış Emri Gönderildi"); } if (CrossBelow(mov, mov2) && LastOrderSide.Obj != Side.Sell) { FX_KaldiracAyarla(); SendMarketOrder(Symbol, SellOrderQuantity*KaldiracOrani, OrderSide.Sell); Debug("Satış Emri Gönderildi"); } } } } }