StochasticSlow'u stratejiye eklemek
- Soruldu
- Kategori
- Algoritmik Trading
- Görüntülenme
- 912 görüntülenme
- Durum
- Cevaplandı
Stratejime StochasticSlow %K (5,5) > StochasticSlow %D (3) koşulunu eklemek istiyorum. Yardımcı olur musunuz lütfen, teşekkürler
Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.
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;
// posizyon takibi - başlangıç
using System.Text;
using System.IO;
// posizyon takibi - biriş
namespace Matriks.Lean.Algotrader
{
public class DI15 : 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(SymbolPeriod.Min60)]
public SymbolPeriod SymbolPeriod;
[Parameter(19)]
public int DiPeriod;
[Parameter(5)]
public decimal Quantity;
DemandIndex demandIndex, demandIndexGun;
// posizyon takibi - başlangıç
[Parameter(0)]
public int Position;
[Parameter(true)]
public bool DosyadanOku;
[Parameter("C:\\IQData")]
public string FolderPath;
[Parameter("DI15")]
public string DosyaAdi;
StochasticSlow stochasticSlow;
// posizyon takibi - bitiş
/// <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()
{
stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, 5, 3, 5, MovMethod.Exponential);
demandIndex = DemandIndexIndicator(Symbol, SymbolPeriod, DiPeriod);
demandIndexGun = DemandIndexIndicator(Symbol, SymbolPeriod.Day, DiPeriod);
AddSymbol(Symbol, SymbolPeriod);
// posizyon takibi - başlangıç
///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(false);
if (DosyadanOku == true)
{
DegiskenleriDosyadanOku();
}
// posizyon takibi - bitiş
WorkWithPermanentSignal(false);
}
/// <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)
{
//StochasticSlow %K (5,5) > StochasticSlow %D (3)
var slowK = Math.Round(stochasticSlow.StochasticSlowK.CurrentValue,2);
var slowD = Math.Round(stochasticSlow.StochasticSlowD.CurrentValue,2);
Debug("Stochastic SlowK @" + slowK + " ? " + "Stochastic SlowD @" + slowD);
if (slowK > slowD && CrossAbove(demandIndex, 15) && demandIndex.CurrentValue>15 && demandIndex.CurrentValue<30 && demandIndexGun.CurrentValue>20 && demandIndexGun.CurrentValue<30 && Position != 2)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
Debug("Alış emri gönderildi.");
Position = 2;
DegiskenleriDosyayaYaz();
}
if (slowK < slowD && CrossBelow(demandIndex, 0) && Position != 1)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
Debug("Satış emri gönderildi.");
Position = 1;
DegiskenleriDosyayaYaz();
}
// %8 kar al
TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 8);
}
// Veri yaz
public void DegiskenleriDosyayaYaz()
{
if (!System.IO.Directory.Exists(FolderPath))
Directory.CreateDirectory(FolderPath);
string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");
if (!File.Exists(fileName))
{
File.AppendAllText(fileName, "0");
}
File.WriteAllText(fileName, Position.ToString());
}
// Veri Oku
public void DegiskenleriDosyadanOku()
{
if (!System.IO.Directory.Exists(FolderPath))
Directory.CreateDirectory(FolderPath);
string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");
if (!File.Exists(fileName))
{
File.AppendAllText(fileName, "0");
}
// Open the file to read from.
string readText = File.ReadAllText(fileName);
Position = Convert.ToInt32(readText);
}
}
}
--------------------------------------------------------------------------------------------------
Önemli Linkler:
MatriksIQ Yardım Dokumanı
MatriksIQ Algo Teknik Dokuman
MatriksIQ’nun öne çıkan özellikleri - Canlı Yayın'dan kayıt
MatriksIQ Videolar
IQ Algoritma Sihirbazını Nasıl Kullanırız
Merhaba yeni bir strateij olusturduktan sonra soldaki Arac Kutusundan StochasticSlow'u bularak cift tiklayiniz.
Daha sonra OnDataUpdate fonksiyonunu asagidaki ile degistiriniz.
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
//StochasticSlow %K (5,5) > StochasticSlow %D (3)
var slowK = Math.Round(stochasticSlow.StochasticSlowK.CurrentValue,2);
var slowD = Math.Round(stochasticSlow.StochasticSlowD.CurrentValue,2);
if(stochasticSlow.StochasticSlowK.CurrentValue > stochasticSlow.StochasticSlowD.CurrentValue)
{
Debug("Stochastic SlowK @" + slowK + " > " + "Stochastic SlowD @" + slowD);
}
if(stochasticSlow.StochasticSlowK.CurrentValue < stochasticSlow.StochasticSlowD.CurrentValue)
{
Debug("Stochastic SlowK @" + slowK + " < " + "Stochastic SlowD @" + slowD);
}
}
--------------------------------------------------------------------------------------------------
Önemli Linkler:
MatriksIQ Yardım Dokumanı
MatriksIQ Algo Teknik Dokuman
MatriksIQ’nun öne çıkan özellikleri - Canlı Yayın'dan kayıt
MatriksIQ Videolar
IQ Algoritma Sihirbazını Nasıl Kullanırız
Teşekkürler, Galiba bir indikatör zaten olduğu için beceremedim. Hata veriyor. Aşağıda benim stratejim var, buna eklemeniz mümkün mü rica etsem. Çok teşekkürler
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;
// posizyon takibi - başlangıç
using System.Text;
using System.IO;
// posizyon takibi - biriş
namespace Matriks.Lean.Algotrader
{
public class DI15 : 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(SymbolPeriod.Min60)]
public SymbolPeriod SymbolPeriod;
[Parameter(19)]
public int DiPeriod;
[Parameter(5)]
public decimal Quantity;
DemandIndex demandIndex, demandIndexGun;
// posizyon takibi - başlangıç
[Parameter(0)]
public int Position;
[Parameter(true)]
public bool DosyadanOku;
[Parameter("C:\\IQData")]
public string FolderPath;
[Parameter("DI15")]
public string DosyaAdi;
// posizyon takibi - bitiş
/// <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()
{
demandIndex = DemandIndexIndicator(Symbol, SymbolPeriod, DiPeriod);
demandIndexGun = DemandIndexIndicator(Symbol, SymbolPeriod.Day, DiPeriod);
AddSymbol(Symbol, SymbolPeriod);
// posizyon takibi - başlangıç
///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(false);
if (DosyadanOku == true)
{
DegiskenleriDosyadanOku();
}
// posizyon takibi - bitiş
WorkWithPermanentSignal(false);
}
/// <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)
{
if (CrossAbove(demandIndex, 15) && demandIndex.CurrentValue>15 && demandIndex.CurrentValue<30 && demandIndexGun.CurrentValue>20 && demandIndexGun.CurrentValue<30 && Position != 2)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
Debug("Alış emri gönderildi.");
Position = 2;
DegiskenleriDosyayaYaz();
}
if (CrossBelow(demandIndex, 0) && Position != 1)
{
SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
Debug("Satış emri gönderildi.");
Position = 1;
DegiskenleriDosyayaYaz();
}
// %8 kar al
TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 8);
}
// Veri yaz
public void DegiskenleriDosyayaYaz()
{
if (!System.IO.Directory.Exists(FolderPath))
Directory.CreateDirectory(FolderPath);
string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");
if (!File.Exists(fileName))
{
File.AppendAllText(fileName, "0");
}
File.WriteAllText(fileName, Position.ToString());
}
// Veri Oku
public void DegiskenleriDosyadanOku()
{
if (!System.IO.Directory.Exists(FolderPath))
Directory.CreateDirectory(FolderPath);
string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");
if (!File.Exists(fileName))
{
File.AppendAllText(fileName, "0");
}
// Open the file to read from.
string readText = File.ReadAllText(fileName);
Position = Convert.ToInt32(readText);
}
}
}
Sitenin çalışması için gerekli çerezleri kullanıyoruz. Ziyaretleri anlamak için analitik çerezleri yalnızca onayınızla kullanırız. Çerez Politikası