0 beğenilme 0 beğenilmeme
472 kez görüntülendi
Merhaba, Williams Fractal indikatörünü stratejilerimize nasıl ekleyebiliriz? Büyük, küçük, eşit ya da kesişme gibi fonksiyonlarla çalıştıramadım.

Örneğin WF belirince al ya da sat?

Teşekkürler
Algoritmik Trading kategorisinde (112 puan) tarafından
tarafından düzenlendi | 472 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme
En İyi Cevap

Merhabalar,

WilliamsFractal için aşağıdaki strateji yapısını inceleyebilirsiniz.

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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;

/*
Yeşil fractialda  enyüksek değeri tutuyor bu seviyenin üzerine çıktığında alış emri gönderiyor. 
Aynı mnatıkla kırmızı fractialda düşük değer değişkende tutuluyor seviyenin altına düştüğünde satıyor.
*/

namespace Matriks.Lean.Algotrader
{
	public class WilliamFractal1 : MatriksAlgo
	{
		[SymbolParameter("GARAN")]
		public string Symbol;

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

		[Parameter(2)]
		public int Period;

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		WilliamsFractal williamFractial;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);

			williamFractial = WilliamsFractalIndicator(Symbol, SymbolPeriod, Period);

			SendOrderSequential(true, Side.Buy);

			WorkWithPermanentSignal(true);
		}

		decimal highSeviye = decimal.MaxValue, lowSeviye = decimal.MinValue;

		public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
		{
			var barDataModel = GetBarData();

			var fr = williamFractial.Value[0][williamFractial.CurrentIndex - Period];
			var high = barDataCurrentValues.LastUpdate.High;
			var low = barDataCurrentValues.LastUpdate.Low;

			if (fr != 0)
			{
				var prevHigh2 = Ref(barDataModel, OHLCType.High, Period);
				var prevLow2 = Ref(barDataModel, OHLCType.Low, Period);

				if (fr == prevHigh2)
				{
					highSeviye = prevHigh2;
				}

				if (fr == prevLow2)
				{
					lowSeviye = prevLow2;
				}
			}

			if (high>highSeviye && LastOrderSide.Obj != Side.Buy)
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
				Debug("Alış emri gönderildi.");
				Debug("High: " + high + " highSeviyessi: " + highSeviye);
				highSeviye = decimal.MaxValue;
				lowSeviye = decimal.MinValue;
			}

			if (lowSeviye>low && LastOrderSide.Obj != Side.Sell)
			{
				SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
				Debug("Satış emri gönderildi.");
				Debug("Low: " + low + " lowSeviyessi: " + lowSeviye);
				highSeviye = decimal.MaxValue;
				lowSeviye = decimal.MinValue;
			}

		}
	}
}

İyi çalışmalar.

(11,069 puan) tarafından
tarafından seçilmiş
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. 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.



7,506 soru
7,510 cevap
4,405 yorum
8,705 kullanıcı