0 beğenilme 0 beğenilmeme
114 kez görüntülendi
AŞAGIDA YAZMIŞ OLDUĞUM STRATEJİNİN İKİ KATI TERS İŞLEM YAPIP VADELİDE SÜREKLİ POZİSYONDA KALMAK İSTİYORUM.KODU DERLEYİP İLETİRSENİZ ÇOK MEMMUN OLURUM.TŞKR.

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks;

using Matriks.Data.Symbol;

using Matriks.Data.Tick;

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;

using Matriks.Enumeration;

using Matriks.IntermediaryInstitutionAnalysis.Enums;

using Newtonsoft.Json;

 

namespace Matriks.Lean.Algotrader

{

public class EMASONDENEME : 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("F_XU0301024")]

public string Symbol1;

 

 

[Parameter(SymbolPeriod.Min15)]

public SymbolPeriod SymbolPeriod1;

 

 

[Parameter(Side.All)]

public Side orderSide;

 

 

 

[Parameter(0.02)]

public decimal ParabolicsarAcc1;

 

[Parameter(0.2)]

public decimal ParabolicsarMaxAcc1;

 

[Parameter(13)]

public int EmaPeriod1;

 

[Parameter(8)]

public int EmaPeriod2;

 

[Parameter(5)]

public int EmaPeriod3;

 

[Parameter(1)]

public decimal OrderQuantity1;

 

[Parameter(1)]

public decimal OrderQuantity2;

 

ParabolicSAR parabolicSar;

EMA ema;

EMA ema2;

EMA ema3;

 

 

 

public override void OnInit()

{

 

parabolicSar = ParabolicSARIndicator(Symbol1, SymbolPeriod1, ParabolicsarAcc1, ParabolicsarMaxAcc1);

ema = EMAIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, EmaPeriod1);

ema2 = EMAIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, EmaPeriod2);

ema3 = EMAIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, EmaPeriod3);

 

 

SendOrderSequential(true, orderSide);

WorkWithPermanentSignal(false);

 

//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 ohlcData1 = GetSelectedValueFromBarData(barData1, OHLCType.Close);

if (parabolicSar.Value[0][parabolicSar.CurrentIndex] < ohlcData1 && ema3.Value[0][ema3.CurrentIndex] > ema2.Value[0][ema2.CurrentIndex] && CrossAbove(ema3, ema, 0, 0))

{

SendPLMOrder(Symbol1, OrderQuantity1, OrderSide.Buy, includeAfterSession:false);

}

if (parabolicSar.Value[0][parabolicSar.CurrentIndex] > ohlcData1 && parabolicSar.Value[0][parabolicSar.CurrentIndex] > ohlcData1 && CrossBelow(ema3, ema, 0, 0))

{

SendPLMOrder(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()

{

}

}
Algoritmik Trading kategorisinde (14 puan) tarafından | 114 kez görüntülendi

3 Cevaplar

0 beğenilme 0 beğenilmeme
if (LONG)

{

if (LastOrderSide.Obj == Side.All && LastOrderSide.Obj != Side.Buy && true)

{

SendMarketOrder("ETH_USDC_FBIN", İşlem_Adeti, OrderSide.Buy);

}

else

{

SendMarketOrder("ETH_USDC_FBIN", İşlem_Adeti * 2, OrderSide.Buy);

}

}

if (SHORT)

{

if (LastOrderSide.Obj == Side.All && LastOrderSide.Obj != Side.Sell && true)

{

SendMarketOrder("ETH_USDC_FBIN", İşlem_Adeti, OrderSide.Sell);

}

else

{

SendMarketOrder("ETH_USDC_FBIN", İşlem_Adeti * 2, OrderSide.Sell);

}

}

}
(88 puan) tarafından
0 beğenilme 0 beğenilmeme

Merhabalar,
Aşağıdaki bağlantıdan örnek çalışmaya ulaşabilirsiniz.
https://destek.matriksdata.com/?qa=blob&qa_blobid=2176465810827818291

Backtest/debug sonuçlarını inceleyiniz.

İyi çalışmalar dileriz.

(2,971 puan) tarafından
0 beğenilme 0 beğenilmeme

senin için derleyip toparladım kardeşim lüzumsuz şeyleride kaldırdım kafan karışmasın diye  çift yönlü çalışır

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks;
using Matriks.Data.Symbol;
using Matriks.Data.Tick;
using System.Net;
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;
using System.Diagnostics;

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

		[Parameter(SymbolPeriod.Min15)]
		public SymbolPeriod SymbolPeriod;
		
		[Parameter(1)]
		public decimal İşlem_Adeti;

		[Parameter(0.02)]
		public decimal ParabolicsarAcc1;

		[Parameter(0.2)]
		public decimal ParabolicsarMaxAcc1;

		[Parameter(13)]
		public int EmaPeriod1;

		[Parameter(8)]
	   public int EmaPeriod2;

		[Parameter(5)]
		public int EmaPeriod3;

		ParabolicSAR parabolicSar; EMA ema; EMA ema2; EMA ema3;

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

			parabolicSar = ParabolicSARIndicator(Symbol, SymbolPeriod, ParabolicsarAcc1, ParabolicsarMaxAcc1);
			ema = EMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, EmaPeriod1);
			ema2 = EMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, EmaPeriod2);
			ema3 = EMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, EmaPeriod3);

			SendOrderSequential(true, Side.All);
			SendOrderSequentialForShort(true, Side.All);
			WorkWithPermanentSignal(true);
		}
		public override void OnDataUpdate(BarDataEventArgs barData)
		{
            var barData1 = GetBarData(Symbol, SymbolPeriod);
            var ohlcData1 = GetSelectedValueFromBarData(barData1, OHLCType.Close);

			if (parabolicSar.Value[0][parabolicSar.CurrentIndex] < ohlcData1 && ema3.Value[0][ema3.CurrentIndex] > ema2.Value[0][ema2.CurrentIndex] && CrossAbove(ema3, ema, 0, 0))
			{
				if (LastOrderSide.Obj == Side.All && LastOrderSide.Obj != Side.Buy && true)
				{
					SendMarketOrder(Symbol, İşlem_Adeti, OrderSide.Buy);
				}
				else
				{
					SendMarketOrder(Symbol, İşlem_Adeti * 2, OrderSide.Buy);
				}
			}
			if (parabolicSar.Value[0][parabolicSar.CurrentIndex] > ohlcData1 && parabolicSar.Value[0][parabolicSar.CurrentIndex] > ohlcData1 && CrossBelow(ema3, ema, 0, 0))
			{
				if (LastOrderSide.Obj == Side.All && LastOrderSide.Obj != Side.Sell && true)
				{
					SendMarketOrder(Symbol, İşlem_Adeti, OrderSide.Sell);
				}
				else
				{
					SendMarketOrder(Symbol, İşlem_Adeti * 2, OrderSide.Sell);
				}
			}
		}
		public override void OnOrderUpdate(IOrder order)
		{
		}
		public override void OnTimer()
		{
		}
	}
}

 

(88 puan) tarafından
8,632 soru
8,586 cevap
4,819 yorum
19,773 kullanıcı