MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
135 kez görüntülendi

Merhaba 
Hazır Exp. listesinde PMAX_Bull veya PMAX_Bear ile tarama yapıyorum. Gelen sonuçlar örneğin PMAX_Bull ile tüm AL pozisyonunda olanları gösteriyor. Halbuki ben "Son Bar" da AL pozisyonuna geçeni yada "SAT"  pozisyonuna geçeni görmek istiyorum. Pozisyonun içinde olanı görmek istemiyorum.

Şurada bu konuyu tartışmıştık. İQ güncellenmeden önce Pmax i import edip bir şekilde desteğinizle çalıştırmıştık.  Şimdi bu konunun sonundaki kodlarda çalışmyor. Sanırım kodların güncellenmesi gerek.

Şöyle birşey denedim. Kodlar hata vermiyor ama yukarıdaki tanıma uygun şekilde de çalışmıyor. 
Desteğinizi rica ederim.

Amacımız : Son barda AL veya SAT pozisyonuna geçenleri görmek, sonrasında taramayı örneğin 30 dakikada tekrarla şeklinde takip edebilmek. 
 

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.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Indicators;

namespace Matriks.Lean.Algotrader
{
	public class PmaxNev : Explorer
	{
	    [Parameter(10)]
        public int ATRPeriod;
        [Parameter(10)]
        public int MovPeriod;
        [Parameter(3)]
        public decimal Coefficient;
        [Parameter(MovMethod.E)]
        public MovMethod MovMethod;

        PMaxIndicator pmaxIndicator;

        public override void OnInit()
        {
            pmaxIndicator = PMaxIndicators(Symbol, SymbolPeriod, ATRPeriod, MovPeriod, Coefficient, MovMethod);

            AddColumns(2);
            SetColumnText(0, "PMAX_ST");
            SetColumnText(1, "PMAX_KLine");
			SetColumnText(2, "EmirYönü");
        }

        public override bool OnExplorer(List<BarDataEventArgs> bardatas)
        {
			var currentBar = bardatas.Last().BarDataIndex;
			
            SetColumn(0, Math.Round(pmaxIndicator.StLine.CurrentValue, 4));
            SetColumn(1, Math.Round(pmaxIndicator.KLine.CurrentValue, 4));
			
			
            if (pmaxIndicator.KLine.CurrentValue > pmaxIndicator.StLine.CurrentValue)
                return true;
            return false;
			
			
			if (pmaxIndicator.Value[1][currentBar - 1] < pmaxIndicator.Value[0][currentBar - 1] && pmaxIndicator.Value[1][currentBar] > pmaxIndicator.Value[0][currentBar])
			{
				SetColumn(2, "AL");
				return true;
			}
			
			else if (pmaxIndicator.Value[0][currentBar - 1] < pmaxIndicator.Value[1][currentBar - 1] && pmaxIndicator.Value[0][currentBar] > pmaxIndicator.Value[1][currentBar])
			{
				SetColumn(2, "SAT");
				return true;
				}
			
			
        }
		
		
		
	}
	
}

 

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

1 cevap

1 beğenilme 0 beğenilmeme

Merhaba,

Linkte belirtiğiniz konudaki explorer örneğini düzenledim.

Yukarıda yazdığınız örnekte Kline >STLine büyük olan ve kesişim olan sembolleri raporlayacaktır.

ilk if bloğunu kaldırıp ikinci if bloğunun sonuna else ekleyip içine return false; yazıp deneyebilirsiniz.

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.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Indicators;

namespace Matriks.Lean.Algotrader
{
	public class PmaxCrossExp : Explorer
	{
		[Parameter(10)]
		public int AtrPeriod;

		[Parameter(10)]
		public int MovPeriod;

		[Parameter(3)]
		public decimal Coeff;

		PMaxIndicator pmax;
		public override void OnInit()
		{
			pmax = PMaxIndicators(Symbol, SymbolPeriod, AtrPeriod, MovPeriod, Coeff, MovMethod.E);

			AddColumns(3);
			SetColumnText(0, "ST");
			SetColumnText(1, "K");
			SetColumnText(2, "EmirYönü");
		}

		public override bool OnExplorer(List<BarDataEventArgs> bardatas)
		{
			SetColumn(0, Math.Round(pmax.StLine.CurrentValue, 4));
			SetColumn(1, Math.Round(pmax.KLine.CurrentValue, 4));

			if (CrossAbove(pmax.KLine, pmax.StLine))
			{
				SetColumn(2, "AL");
				return true;
			}else if (CrossBelow(pmax.KLine, pmax.StLine))
			{
				SetColumn(2, "SAT");
				return true;
			}else
			{
				return false;
			}
		}
	}
}

 

(5,991 puan) tarafından
2,205 soru
2,063 cevap
1,856 yorum
1,520 kullanıcı