0 beğenilme 0 beğenilmeme
446 kez görüntülendi
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.AI;
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 TottStokastikVariable : MatriksAlgo
	{

		[SymbolParameter("BTC_USDT_FBIN")]
		public string Symbol;

		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod SymbolPeriod;

		[Parameter(40)]
		public int TOTTPeriod;

		[Parameter(1)]
		public decimal TOTTOpt;

		[Parameter(0.001d)]
		public decimal TwinOttCoef;

		[Parameter(500)]
		public int Stokastik_Periyod;

		[Parameter(200)]
		public int Stokastik_Smooth;

		[Parameter(true)]
		public bool AcigaSatisYapilsin;

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		int FirstRun = 0;
		int realposition = 0;

		TOTT tott;
		StochasticSlow stochasticSlow;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TOTTPeriod, TOTTOpt, TwinOttCoef, MovMethod.Variable);
			stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, Stokastik_Periyod, Stokastik_Smooth, Stokastik_Smooth, MovMethod.Variable);

			SendOrderSequential(true);
		}

		public override void OnInitComplated()
		{
		}

		public override void OnTimer()
		{
		}

		public override void OnNewsReceived(int newsId, List<string> relatedSymbols)
		{
		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (!AcigaSatisYapilsin) FirstRun = 0;
			if ((tott.Mov > tott.OttUp) && stochasticSlow.StochasticSlowK.CurrentValue > stochasticSlow.StochasticSlowD.CurrentValue)
			{
				if (FirstRun == 0)
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
					Debug("Alış emri gonderildi.");
					FirstRun = 1;
				}
				else
				{
					SendMarketOrder(Symbol, BuyOrderQuantity * 2, (OrderSide.Buy));
					Debug("Alış emri gonderildi.");
				}
			}
			if ((tott.Mov < tott.OttUp) && stochasticSlow.StochasticSlowK.CurrentValue < stochasticSlow.StochasticSlowD.CurrentValue)
			{
				if (FirstRun == 0)
				{
					SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
					Debug("Satış emri gonderildi.");
					FirstRun = 1;
				}
				else
				{
					SendMarketOrder(Symbol, SellOrderQuantity * 2, (OrderSide.Sell));
					Debug("Satış emri gonderildi.");
				}
			}
		}

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{

			}
		}
	}
}

Merhabalar, 

TOTT stratejisine ek olarak Değişken StokastikSlow indikatörünün kendi değişken ortalaması üzerinde ise AL koşulunu karşılamasını,

Kendi değişken ortalamasının altında ise SAT koşulunu karşılamasını istiyorum. Böyle birşey mümkün olabilir mi ?

 

 

Algoritmik Trading kategorisinde (32 puan) tarafından | 446 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

Aşağıdaki kodu incelebilirsiniz..

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.AI;
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 TottStokastikVariable : MatriksAlgo
	{
		[SymbolParameter("BTC_USDT_FBIN")]
		public string Symbol;

		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod SymbolPeriod;

		[Parameter(40)]
		public int TOTTPeriod;

		[Parameter(1)]
		public decimal TOTTOpt;

		[Parameter(0.001d)]
		public decimal TwinOttCoef;

		[Parameter(500)]
		public int Stokastik_Periyod;

		[Parameter(200)]
		public int Stokastik_Smooth;
		
		[Parameter(5)]
		public int StockHO;

		[Parameter(true)]
		public bool AcigaSatisYapilsin;

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		int FirstRun = 0;
		int realposition = 0;

		TOTT tott;
		StochasticSlow stochasticSlow;

		MOV mov;

		public override void OnInit()
		{

			AddSymbol(Symbol, SymbolPeriod);
			tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TOTTPeriod, TOTTOpt, TwinOttCoef, MovMethod.Variable);
			stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, Stokastik_Periyod, Stokastik_Smooth, Stokastik_Smooth, MovMethod.Variable);
			mov = MOVIndicator(stochasticSlow, StockHO, MovMethod.Variable);

			SendOrderSequential(true);
		}		

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (!AcigaSatisYapilsin) FirstRun = 0;
			if ((tott.Mov > tott.OttUp) && 
				stochasticSlow.StochasticSlowK.CurrentValue > mov.CurrentValue)
			{
				if (FirstRun == 0)
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
					Debug("Alış emri gonderildi.");
					FirstRun = 1;
				}
				else
				{
					SendMarketOrder(Symbol, BuyOrderQuantity * 2, (OrderSide.Buy));
					Debug("Alış emri gonderildi.");
				}
			}
			if ((tott.Mov < tott.OttUp) && 
				stochasticSlow.StochasticSlowK.CurrentValue < mov.CurrentValue)
			{
				if (FirstRun == 0)
				{
					SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
					Debug("Satış emri gonderildi.");
					FirstRun = 1;
				}
				else
				{
					SendMarketOrder(Symbol, SellOrderQuantity * 2, (OrderSide.Sell));
					Debug("Satış emri gonderildi.");
				}
			}
		}
	}
}

 

(15,892 puan) tarafından
0 0

Desteğiniz için çok teşekkür ederim. Ben aşağıdaki gibi kendi değişken ortalaması ile kullanmak istemiştim. ama mantığını anladım. Çok teşekkürler tekrar. 


tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TOTTPeriod, TOTTOpt, TwinOttCoef, MovMethod.Variable);
stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, Stokastik_Periyod, Stokastik_Periyod, Stokastik_Periyod, MovMethod.Variable);
mov = MOVIndicator(stochasticSlow, Stokastik_Periyod, MovMethod.Variable);

 

 

 

8,639 soru
8,593 cevap
4,826 yorum
19,852 kullanıcı