MOST 3 lü stratejisinin OTT versiyonunu yazabilirmisiniz?
- Soruldu
- Kategori
- Algoritmik Trading
- Görüntülenme
- 1.930 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
biraz detay verebilir misiniz yardımcı olmaya çalışayım. Alışta ve satışda farklı periyodlu mostlar mı yoksa büyük trendi tespit edip boğa ve ayı piyasası için 2 farklı most mu?
edit: hazır stratejilerdeki most 3 den bahsediyormuşsunuz buyrun sadece mostları ott yaptım.
edit2: koddaki hata giderildi.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using System.Windows.Media;
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;
//*******************************************************ACIKLAMA*******************************************************//
//Stratejide 3 MOST indikatörü kullanılır. Most1'in mov'u most2'nin üzerinde iken, MOST2'de bullish cross olursa (mov2 //
//most2'nin üzerine kırarsa) alım, mov2 most2'nin altına kırarsa satım yapılır. Most1'in mov'u most2'nin üzerinde //
//değilse most3'e bakılır. MOST3'de bullish cross olursa (mov3 most3'ün üzerine kırarsa) alım, mov3 most3'ün altına //
//kırarsa satım yapılır. //
namespace Matriks.Lean.Algotrader
{
public class OTTThree : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod;
[Parameter(5)]
public decimal BuyOrderQuantity;
[Parameter(5)]
public decimal SellOrderQuantity;
[Parameter(50)]
public int Ott1Periyot;
[Parameter(2.5)]
public decimal Ott1_Yuzde;
[Parameter(20)]
public int Ott2Periyot;
[Parameter(1.4)]
public decimal Ott2_Yuzde;
[Parameter(20)]
public int Ott3Periyot;
[Parameter(1.4)]
public decimal Ott3_Yuzde;
OTT ott1;
OTT ott2;
OTT ott3;
// indikator tanımları.
/// <summary>
/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
/// </summary>
public override void OnInit()
{
ott1 = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Ott1Periyot, Ott1_Yuzde, MovMethod.VAR, true);
ott2 = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Ott2Periyot, Ott2_Yuzde, MovMethod.VAR, true);
ott3 = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Ott3Periyot, Ott3_Yuzde, MovMethod.VAR, true);
AddSymbol(Symbol, SymbolPeriod);
// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.
// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.
WorkWithPermanentSignal(true);
//Eger emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir.
//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz.
SendOrderSequential(true);
}
/// <summary>
/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
if (ott1.ottLine.CurrentValue > ott1.ottSupportLine.CurrentValue)
{
if (CrossAbove(ott2.ottSupportLine, ott2.ottLine))
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
Debug("Alış Emri Gönderildi");
}
else if (CrossAbove(ott2.ottLine, ott2.ottSupportLine))
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
Debug("Satış Emri Gönderildi");
}
}
else
{
if (CrossAbove(ott3.ottSupportLine, ott3.ottLine))
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
Debug("Alış Emri Gönderildi");
}
else if (CrossAbove(ott3.ottLine, ott3.ottSupportLine))
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
Debug("Satış Emri Gönderildi");
}
}
}
/// <summary>
/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="barData">Emrin son durumu</param>
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
}
}
}
}
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ı
ellerin,ze sağlık çoook teşekkür ederim