Merhabalar,
Çizdiğiniz manuel trend üzerinde sağ klik yaparak strateji için kopyalayabilir ve sonra, strateji içinde, fiyatın bu trendi kesmesine göre AL-SAT yaptırabilirsiniz.
örnek kod ektedir.
Stratejiyi MatriksIQ içine aldıktan sonra, düzenle ile kodu açabilirsiniz.
Kodun içindeki trend ile ilgili satırın yerine, kopyala yaptığınız trendi yapıştır ile eklerseniz, strateji içine kendi trendinizi almış olursunuz.
Çalıştırırken, sembol ve periyod seçimini doğru yapmayı unutmayınız.
using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
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;
using System.Windows.Media;
//***********************************************************ACIKLAMA***********************************************************//
//MatriksIQ'da grafik uzerine cizdigimiz trendlere sag tiklayarak Algo Kodu Kopyala secerek, algoya aktarabiliriz. Bu algo //
//icerisinde kopyalamadan ve kopyalayarak yazilmis trend cizgisi ornekleri vardir. Ornek olarak bir trend ustu al, trend alti //
//sat stratejisi de yazilmistir. Alis satis emirleri kapatilip bunun yerine bir alttaki comment'e alinmis alert fonksiyonlari //
//acilarak sadece alarm ureten bir stratejiye de donusturulebilir. //
namespace Matriks.Lean.Algotrader
{
public class TRENDSTRATEJIDENEME : 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("GARAN")]
public string Symbol;
[Parameter(1)]
public int Quantity;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
ITrend drawthis; //Cizdirecegimiz trend objesini burada tanimliyoruz
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
//Cizilebilecek/grafikten kopyalanmis farkli trend ornekleri
//drawthis = MyTrend(Symbol, SymbolPeriod, new DateTime(2020, 4, 21, 10, 0, 0), 6733.27333184572m, new DateTime(2020, 4, 22, 15, 0, 0), 6897.78552467496m);
//drawthis = MyTrend(Symbol, SymbolPeriod, new DateTime(2020, 4, 30, 3, 0, 0), new DateTime(2020, 5, 5, 14, 0, 0), TrendType.Decreasing);
drawthis = MyTrend(Symbol, SymbolPeriod, new DateTime(2022, 1, 4, 16, 5, 0), 11.3307732049519m, new DateTime(2022, 1, 5, 12, 5, 0), 11.47477014825m);
//drawthis = MyTrend(Symbol, SymbolPeriod, 100, 0, 12.64m, 8.55m); //MyTrend fonksiyonunu kullanarak trend cizdirip bunu drawthis objesine atiyoruz
DrawTrend(drawthis, Colors.Gold); //Olusturdugumuz trend objesini cizdirmek icin DrawTrend fonksiyonunu kullaniyoruz, bu satirsa renklendirme ornegi de goruluyor
//DrawTrend(drawthis, Color.FromRgb(255, 0, 255)); //Renk atamasini RGB olarak belirlemek istersek bu satiri acarak ederek deneyebiliriz
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 OnInitCompleted()
{
}
/// <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 close = barDataCurrentValues.LastUpdate.Close;
if (close < drawthis.CurrentValue)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
Debug("Kapanis trend cizgisinin uzerinde. Alis emri gonderildi");
//Alert("Fiyat trend cizgisinin uzerinde kapatti");
}
if (close > drawthis.CurrentValue)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
Debug("Kapanis trend cizgisinin altinda. Satis emri gonderildi");
//Alert("Fiyat trend cizgisinin altinda kapatti");
}
}
/// <summary>
/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="order">Emrin son durumu</param>
public override void OnOrderUpdate(IOrder order)
{
if (order.OrdStatus.Obj == OrdStatus.Filled)
{
}
}
/// <summary>
/// Strateji durdurulduğunda bu fonksiyon tetiklenir.
/// </summary>
public override void OnStopped()
{
}
}
}