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

1 - strateji çalıştırdıktan sonra pc kapanması, yanlışlıkla durdurma vb yaşandığında tekrar sıfırdan çalıştırınca mevcut portföydeki pozisyonun yönünü görmesi ve ona göre kaldığı yerden işlemlere devam etmesini istiyorum. forumu felan kurcaladım ama çok iyi c sharpta bilmediğimden yapamadım.

2 - Diğer yandan durdurup geri çalıştırdığında da kar-al/stop kısmı o anki pozisyon için çalışmıyor. açık durduğu zaman bir sonraki pozisyon için çalışıyor. Duraklatmadan sonra çalıştırıncada sentetik emirin o anki pozisyon içinde tetiklenmesin nasıl sağlarım ?

yardımcı olabilirmisiniz.

 

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks;
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 TOTT_kar_al_viop_Kopya : 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("FGARAN")]
			public string Symbol;


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



		[Parameter(40)]
		public int TOTTPeriod;

		[Parameter(1)]
		public decimal TOTTOpt;

		[Parameter(0)]
		public decimal TwinOttCoef;

		[Parameter(MovMethod.S)]
		public MovMethod TottMovMethod;

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		[Parameter(0)]
			public decimal StopLevel1;

		[Parameter(0)]
			public decimal StopLevel2;

		TOTT tott;



		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod1);
			tott = TOTTIndicator(Symbol, SymbolPeriod1, OHLCType.Close, TOTTPeriod, TOTTOpt, TwinOttCoef, TottMovMethod);




			// Gerekli başla - Açığa satış
			WorkWithPermanentSignal(true);
			SendOrderSequential(true, HangiIslemleBaslasin);
			// #Gerekli bitti - Açığa satış
			
		}
			
			
		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(tott.Mov, tott.OttUp))
			{
				// Gerekli başla - Açığa satış
				FX_Alis(Symbol, BuyOrderQuantity);
				// #Gerekli bitti - Açığa satış
			}
			
			if (CrossBelow(tott.Mov, tott.OttDown))
			{
				// Gerekli başla - Açığa satış
				FX_Satis(Symbol, SellOrderQuantity);
				// #Gerekli bitti - Açığa satış

			}

		}

		// Gerekli başla - Açığa satış
		[Parameter(true)]
		public bool AcigaSatisYapilsin;

		[Parameter(false)]
		public bool AksamSeansiniDahilEt;

		[Parameter(Side.All)]
		public Side HangiIslemleBaslasin;

		//yön tayini için
		[Parameter(2)]
		public int YönAyarı;

		public bool FX_Alis(string sembol, decimal quantity)
		{
			bool sonuc = false;
			if (LastOrderSide.Obj != Side.Buy)
			{
				var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * YönAyarı;

				SendMarketOrder(sembol, _quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);

				TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, StopLevel1, includeAfterSession:false);
				Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
				LastOrderSideForShort = LastOrderSide;
				sentetikEmirdenMI = false;
				sonuc = true;
			}
			return sonuc;
		}

		public bool FX_Satis(string sembol, decimal quantity)
		{
			bool sonuc = false;
			if (LastOrderSide.Obj != Side.Sell)
			{
				var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * YönAyarı;

				SendMarketOrder(sembol, _quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);

				TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, StopLevel1, includeAfterSession:false);
				Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
				LastOrderSideForShort = LastOrderSide;
				sentetikEmirdenMI = false;
				sonuc = true;
			}
			return sonuc;
		}

		bool sentetikEmirdenMI = false;

		public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
		{
			if (sOrder.EnableOrderSending)
			{
				if (AcigaSatisYapilsin)
				{
					LastOrderSide.Obj = Side.All;
					sentetikEmirdenMI = true;
				}

				Debug("Sentetik emir tetiklendi");
			}
		}



	}
}

 

 

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

1 cevap

0 beğenilme 0 beğenilmeme
sorumun cevaplarını öğrendim . silinebilir.
(108 puan) tarafından
0 0
Sorularınızın cevaplarını buradan kendinizde belirtseniz, sizin gibi problem yaşayan arkadaşlar için yardım niteliği taşıyabilse keşke.
0 0
1 - Herhangi bir şekilde matriks IQ kapanırsa mevcut çalışan tüm robotlar otomatik durdurulmuş gibi "çalıştırılmış stratejiler " kısmına geçiyor. orada play gibi olan "Devam et" butonuna basıldığında ilk çıkan ekrandaki eski algo pozisyonlarını ekle kutucuğunu işaretlerseniz kaldığı yerden son pozisyon yönünüde görerek devam ediyor.

 

2 - Bu iki satıtı al sat sentetik emir get portofilo vs heryere yazarsan çalışıyor. Ben kullanmayı bıraktım.

TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, KarAl);

StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, ZararDurdur);
7,645 soru
7,642 cevap
4,448 yorum
11,059 kullanıcı