Merhaba,
Strateji ornegi asagidadir. mum altta kapandiktan sonra tetiklenir, RSI'in yukselise gecmesini ve MACD'nin pozitif sinyalde olmasini bekler.
RSI'in yukselise ya da dususe gectigi 2 periyottan sonra karar verilir. Yani RSI icin son barda ve bir onceki barda da yukseliyor olmasi sarti aranir.
RSI yukseliyor ve MACD pozitif sinyali durumu olustuktan sonra alim yapilir
Mum yuksekte kapandiginda ve RSI yukseliyor + MACD pozitif sinyali geldikten sonra ise satis yapilir.
Strateji calisirken ne yaptigina dair detayli bilgileri, stratejiyi calistirdiktan sonra acilan strateji raporu penceresinde Debug ve Loglar tab'lerinden takip edebilirsiniz. SendOrderSequential(true); set edildiginden Strateji ilk olarak alim emri ile baslayacak, sonra satis emri gonderebilecektir.
Kullanicilara IQ Algo ilk kullanmaya basladiklarinda yardimci olmak acisindan kod yazma disinda, sinirsiz destek veremiyoruz. Kullanicilarin ornek stratejilerden, sablonlardan, matriks destek platformu ve IQ Algo teknik dokumanindan, C# ile ilgili online fazla sayida mevcut yardim ve ogrenim sayfalarindan yararlarnmasini tavsiye ediyoruz.
***STRATEJILERI TEST/DENEME ORTAMINDA SINAMADAN VE SIZIN ISTEDIGINIZ SEKILDE CALISTIGINA EMIN OLMADAN GERCEK ORTAMDA HIC BIR ZAMAN CALISTIRMAYIN***
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;
/*Merhaba mumlar en altta iken kapanis yaptiginda satin almasini istiyorum ve mumlar en
ustte kapani macd kesismesinde alsin Simdiden tesekkur ederim..
bir eklemek istedigim birsey daha var 1 dakikalik ve suresini ayarlamakta istiyorum
dakikalik,5dakikalik v.s Satis icin tavanda ornegin 1 dakikalik kapanis yapildiginda
satis islemi geerceklessin rsi asagi yone seyir verdiginde ve eger atlama olursa macd
kesismesinde satisi versin gibi simdiden tesekkurler*/
//Strateji mum altta kapandiktan sonra tetiklenir, RSI'in yukselise gecmesini ve MACD'nin pozitif sinyalde olmasini bekler
//RSI'in yukselise ya da dususe gectigi 2 periyottan sonra karar verilir. Yani RSI son barda ve bir onceki barda da yukseliyor olma sarti aranir.
//RSI yukseliyor ve MACD pozitif sinyali durumu olustuktan sonra alim yapilir
//Mum yuksekte kapandiginda ve RSI yukseliyor + MACD pozitif sinyali geldikten sonra ise satis yapilir
namespace Matriks.Lean.Algotrader
{
public class mumAl : 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("TUPRS")]
public string Symbol;
[Parameter(SymbolPeriod.Min)]
public SymbolPeriod SymbolPeriod;
[Parameter(1)]
public int Quantity;
int BUY_Flag = 0, SELL_Flag = 0;
RSI rsi;
MACD macd;
/// <summary>
/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
/// </summary>
public override void OnInit()
{
macd = MACDIndicator(Symbol, SymbolPeriod, OHLCType.Close, 26, 12, 9);
rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, 14);
AddSymbol(Symbol, SymbolPeriod);
//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir.
//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz.
SendOrderSequential(true);
WorkWithPermanentSignal(true);
}
/// <summary>
/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
/// </summary>
public override void OnInitComplated()
{
}
/// <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(BarDataCurrentValues barDataCurrentValues)
{
var barDataModel = GetBarData(Symbol, SymbolPeriod);
var open = barDataModel.Open[barDataCurrentValues.LastUpdate.BarDataIndex - 1];
var high = barDataModel.High[barDataCurrentValues.LastUpdate.BarDataIndex - 1];
var low = barDataModel.Low[barDataCurrentValues.LastUpdate.BarDataIndex - 1];
var close = barDataModel.Close[barDataCurrentValues.LastUpdate.BarDataIndex - 1];
var rsi_current = Math.Round(rsi.CurrentValue,2);
var PrevRsi = Math.Round(Ref(rsi,1),2);
var Prev2Rsi = Math.Round(Ref(rsi,2),2);
var MACD_current = Math.Round(macd.Macd.CurrentValue,2);
var MACD_Trigger_current = Math.Round(macd.MacdTrigger.CurrentValue,2);
Debug($"Open = {open}, High = {high}, Low = {low}, Close = {close}");
Debug($"BUY_Flag = {BUY_Flag}, SELL_Flag = {SELL_Flag}");
Debug($"rsi = {rsi_current}, PrevRsi = {PrevRsi}, Prev2Rsi = {Prev2Rsi}");
Debug($"MACD = {MACD_current}, MACD_Trigger = {MACD_Trigger_current}");
if (close == low) { BUY_Flag = 1; SELL_Flag = 0; }
else if (close == high) { SELL_Flag = 1; BUY_Flag = 0; }
if(BUY_Flag==1 && (rsi.CurrentValue >= Ref(rsi,1)) && (Ref(rsi,1) > Ref(rsi,2)))
{
if(MACD_current > MACD_Trigger_current)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
Debug("Alis emri gonderildi.");
BUY_Flag = 0;
}
}
if(SELL_Flag == 1 && (rsi.CurrentValue <= Ref(rsi,1)) && (Ref(rsi,1) < Ref(rsi,2)))
{
if(MACD_current < MACD_Trigger_current)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
Debug("Satis emri gonderildi.");
SELL_Flag = 0;
}
}
}
/// <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)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
}
}
}
}
10498.5