Belirli süredir açık olan pozisyonu kapama
- Soruldu
- Kategori
- Algoritmik Trading
- Görüntülenme
- 1.221 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 yapıyı 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;
namespace Matriks.Lean.Algotrader
{
public class SablonXBardırPozisyonVarsa : 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(SymbolPeriod.Day)]
public SymbolPeriod SymbolPeriod;
[Parameter(1)]
public decimal BuyOrderQuantity;
[Parameter(3)]
public int Period;
[Parameter(2)]
public decimal Percentage;
[Parameter(8)]
public int BarSayisi;
MOST most;
public override void OnInit()
{
most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.Exponential);
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 backtestte 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, Side.Buy);
}
int ilkIslem = 0;
public override void OnDataUpdate(BarDataEventArgs barData)
{
if (ilkIslem + BarSayisi == barData.BarDataIndex && Adet != 0)
{
SendMarketOrder(Symbol, Adet, (OrderSide.Sell));
Adet = 0;
ilkIslem = 0;
Debug("Satış emri verildi.");
Debug("Most.ExMov:" + most.ExMOV.CurrentValue);
Debug("Most:" + most.CurrentValue);
}
else if(CrossAbove(most.ExMOV, most))
{
SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
ilkIslem = barData.BarDataIndex;
Adet += BuyOrderQuantity;
Debug("Alış emri verildi.");
Debug("Most.ExMov:" + most.ExMOV.CurrentValue);
Debug("Most:" + most.CurrentValue);
Debug("sayı:" + barData.BarDataIndex);
}
}
public decimal Adet = 0;
public override void OnOrderUpdate(IOrder order)
{
}
}
}
Burada bar saydırma işlemini barData.BarDataIndex; fonksiyonu ile yaptırdık.
Bu zamana kadarki alım işlemlerinizi de Adet += BuyOrderQuantity; kod satırında tuttuk.
Lütfen inceleyiniz.
İyi çalışmalar.
Merhaba,
aşağıdaki yapıyı kullnabilirsiniz.
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;
namespace Matriks.Lean.Algotrader
{
public class Test2 : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Day)]
public SymbolPeriod SymbolPeriod;
[Parameter(1)]
public decimal BuyOrderQuantity;
[Parameter(1)]
public decimal SellOrderQuantity;
[Parameter(3)]
public int Period;
[Parameter(2)]
public decimal Percentage;
[Parameter(5)]
public int BarSayisi;
MOST most;
public override void OnInit()
{
most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.Exponential);
AddSymbol(Symbol, SymbolPeriod);
WorkWithPermanentSignal(true);
SendOrderSequential(true, Side.Buy);
}
int pozisyonAcildigiBar = int.MaxValue;
bool bayrak=false;
public override void OnDataUpdate(BarDataEventArgs barData)
{
if(CrossAbove(most,most,1,0)){
SendMarketOrder(Symbol,BuyOrderQuantity,OrderSide.Buy);
Debug("Alış emri gönderildi");
}
if(CrossBelow(most,most,1,0)){
SendMarketOrder(Symbol,SellOrderQuantity,OrderSide.Sell);
Debug("Satış emri gönderildi");
}
if(bayrak && barData.BarDataIndex>=pozisyonAcildigiBar+BarSayisi){
TakeProfit(Symbol,SyntheticOrderPriceType.PricePoint,0);
Debug("Pozisyon "+BarSayisi+" bardır açık olduğu için kapatıldı.");
pozisyonAcildigiBar=int.MaxValue;
bayrak=false;
}
}
public override void OnOrderUpdate(IOrder order)
{
if(order.OrdStatus.Obj==OrdStatus.Filled){
pozisyonAcildigiBar=GetBarData().BarDataIndexer.LastBarIndex;
if(GetPortfolio().ContainsKey(Symbol)){
bayrak=GetPortfolio()[Symbol]!=0?true:false;
}
}
}
}
}
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ı
Merhaba, bir süredir bu yapıyı inceliyorum ve farklı denemeler yapıyorum fakat hiçbirinde barData.BarDataIndex; fonksiyonu ile saydırmayı başaramadım. Rica etsem kendi stratejimde deneyebilmem için sadece bar saydırma kısmı olan bir cevap atabilir misiniz