0 beğenilme 0 beğenilmeme
497 kez görüntülendi

Merhabalar, kodlama ile bir strateji oluşturdum ve BBW belli bir değerden büyüktür koşulu ekledim.
https://destek.matriksdata.com/?qa=6080/pmax-ve-bbw-stratejisinde-bbw-de%C4%9Ferini-optimize-etmek
Yukarıdaki cevaptaki gibi yaptım fakat sonucu görüyorsunuz, 0.061'den büyük olma koşulu vermiş fakat alım yaptığı noktada BBW 0.0281 değeri almış. 

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

1 cevap

0 beğenilme 0 beğenilmeme
Merhaba,

Strateji kalıcı sinyalde çalışıyorsa alım yaptığı noktadaki BBW değeri değil alım sinyali oluşan bir önceki bardaki BBW değerine bakılması gerekir.

Gönderdiğiniz resim net değil eğer bir önceki bardaki BBW değeri de koşulunuzu sağlamıyorsa kullandığınız stratejiyi göndermenizde bir sakınca yoksa strateji ile birlikte hangi parametrelerle denediğinizi ve hangi bardalarda sorun olduğunu detaylandırır mısınız?
(15,892 puan) tarafından
0 0
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;

namespace Matriks.Lean.Algotrader
{
	public class TMOVRENKBBW : 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("ETH_USDT_BIN")]
			public string Symbol1;


		[Parameter(SymbolPeriod.Min10)]
			public SymbolPeriod SymbolPeriod1;


		[Parameter(34)]
		public int TillsonPeriod;

		[Parameter(0.236)]
		public decimal TillsonA;

		[Parameter(21)]
			public int BbwPeriod1;

		[Parameter(2)]
			public decimal BbwStandardDeviation1;

		[Parameter(MovMethod.E)]
			public MovMethod BbwMovMethod1;

		[Parameter(1)]
			public decimal OrderQuantity1;

		[Parameter(1)]
			public decimal OrderQuantity2;

		[Parameter(0.01)]
			public decimal BBW;

		TMOV tmov;
		BBW bbw;



		public override void OnInit()
		{

			tmov = TMOVIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, TillsonPeriod, TillsonA);
			bbw = BBWIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, BbwPeriod1, BbwStandardDeviation1, BbwMovMethod1);


			SendOrderSequential(true, Side.Buy);
			WorkWithPermanentSignal(true);

			//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.
			// SetTimerInterval(3600);

			//Alttaki fonksiyon ile tanımlanan sembol ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.
			//AddNewsSymbol(Symbol);

			//Alttaki fonksiyon ile tanımlanan anahtar kelime ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.
			//AddNewsKeyword("KAP");
		}

		/// <summary>
		/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
		/// </summary>
		public override void OnInitCompleted()
		{

		}

		/// <summary>
		/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.
		/// </summary>
		public override void OnTimer()
		{

		}

		/// <summary>
		/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.
		/// </summary>
		/// <param name="newsId">Gelen haberin id'si</param>
		/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>
		public override void OnNewsReceived(int newsId, List<string> relatedSymbols)
		{

		}

		/// <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(BarDataEventArgs barData)
		{
			var barData1 = GetBarData(Symbol1, SymbolPeriod1);
			var RefTilson1 = Ref(tmov, -1);
			var RefTilson2 = Ref(tmov, -2);

			if (tmov.CurrentValue>RefTilson1 && bbw.Value[0][bbw.CurrentIndex] > 0.01m)
			{
				SendMarketOrder(Symbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession:false);
			}
			if (tmov.CurrentValue<RefTilson1 && bbw.Value[0][bbw.CurrentIndex] > 0.01m)
			{
				SendMarketOrder(Symbol1, OrderQuantity2, OrderSide.Sell, includeAfterSession:false);
			}

		}

		/// <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)
		{
		}

		/// <summary>
		/// Strateji durdurulduğunda bu fonksiyon tetiklenir.
		/// </summary>
		public override void OnStopped()
		{
		}
	}
}

 

0 0

Anladığım kadarıyla stratejiyi test ederken BBW değerine 0.061 değerini giriyorsunuz.

Ancak bu BBW değeri strateji içerisinde kullanmamış koşullarınızda sabit olarak 0.01 yazıyor

if (tmov.CurrentValue>RefTilson1 && bbw.Value[0][bbw.CurrentIndex] > 0.01m)
if (tmov.CurrentValue<RefTilson1 && bbw.Value[0][bbw.CurrentIndex] > 0.01m)

kodu aşağıdaki gibi düzenlenmesi gerekir.

if (tmov.CurrentValue>RefTilson1 && bbw.Value[0][bbw.CurrentIndex] > BBW)
if (tmov.CurrentValue<RefTilson1 && bbw.Value[0][bbw.CurrentIndex] > BBW)
8,636 soru
8,590 cevap
4,821 yorum
19,786 kullanıcı