MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
32 kez görüntülendi
Stratejimin periyodu 240dk. Bu yüzden gün kapanışında emir gönderdiği çok oluyor. Gün sonun olduğu için alım veya satış gerçekleşmediği zaman ertesi gün sabah tekrar alım veya satış vermesini nasıl sağlaya bilirim.
Algoritmik Trading kategorisinde (12 puan) tarafından | 32 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,

Dilerseniz aşağıdaki stratejiyi inceleyip kullanabilirsiniz. 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
namespace Matriks.Lean.Algotrader
{
	public class ErtesiGunGonder : MatriksAlgo
	{
		[SymbolParameter("GARAN")]
public string Symbol;
		[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod;
		[Parameter(1)]
public decimal BuyOrderQuantity;
		[Parameter(1)]
public decimal SellOrderQuantity;
		[Parameter(10)]
public int ATRPeriod;
		[Parameter(10)]
public int MovPeriod;
		[Parameter(3)]
public decimal Coefficient;
		[Parameter(MovMethod.E)]
public MovMethod MovMethod;
		PMaxIndicator pmax;
		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			pmax = PMaxIndicators(Symbol, SymbolPeriod, ATRPeriod, MovPeriod, (decimal) Coefficient, MovMethod);
			WorkWithPermanentSignal(true);
			SendOrderSequential(true, Side.Buy);
			SendOrderSequentialForShort(true, Side.All);
		}
		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			var _dTime = barData.BarData.Dtime;
			if (_dTime.Hour < 18)
			{
				if (LastOrderSideForShort.Obj == Side.Buy)
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış emri gonderildi.");
				}else if (LastOrderSideForShort.Obj == Side.Sell)
				{
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
					Debug("Satış emri gonderildi.");
				}
				LastOrderSideForShort.Obj = Side.All;
			}
			if (CrossAbove(pmax.KLine, pmax.StLine))
			{
				if (_dTime.Hour >= 18)
				{
					LastOrderSideForShort.Obj = Side.Buy;
				}else
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
					Debug("Alış emri gonderildi.");
				}
			}
			if (CrossBelow(pmax.KLine, pmax))
			{
				if (_dTime.Hour >= 18)
				{
					LastOrderSideForShort.Obj = Side.Sell;
				}else
				{
					SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
					Debug("Satış emri gonderildi.");
				}
			}
		}
		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				SendOrderSequentialForShort(true, Side.All);
			}
		}
	}
}

İyi çalışmalar.

(3,754 puan) tarafından
0 0
Cevap için çok teşekkürler. Biraz karışık geldi ama çalışıp sizden yine destek isteyebilirim. Bir de aklıma şöyle bir şey geldi. Algoritma sihirbazında Periyod 240dk seçildiğin de emir ekleme alanına, emir tipi gibi bir pencere eklenebilir mi?
0 0
Merhabalar,

Arkadaşlara talebinizi ileteceğiz.

İyi çalışmalar.
4,263 soru
4,237 cevap
2,929 yorum
3,164 kullanıcı