Williams Fractal hakkında
- Soruldu
- Kategori
- Algoritmik Trading
- Görüntülenme
- 899 görüntülenme
- Durum
- Çözüldü
Örneğin WF belirince al ya da sat?
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.
Kabul edilen cevap
Merhabalar,
WilliamsFractal için aşağıdaki strateji yapısını inceleyebilirsiniz.
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;
/*
Yeşil fractialda enyüksek değeri tutuyor bu seviyenin üzerine çıktığında alış emri gönderiyor.
Aynı mnatıkla kırmızı fractialda düşük değer değişkende tutuluyor seviyenin altına düştüğünde satıyor.
*/
namespace Matriks.Lean.Algotrader
{
public class WilliamFractal1 : MatriksAlgo
{
[SymbolParameter("GARAN")]
public string Symbol;
[Parameter(SymbolPeriod.Min5)]
public SymbolPeriod SymbolPeriod;
[Parameter(2)]
public int Period;
[Parameter(1)]
public decimal BuyOrderQuantity;
[Parameter(1)]
public decimal SellOrderQuantity;
WilliamsFractal williamFractial;
public override void OnInit()
{
AddSymbol(Symbol, SymbolPeriod);
williamFractial = WilliamsFractalIndicator(Symbol, SymbolPeriod, Period);
SendOrderSequential(true, Side.Buy);
WorkWithPermanentSignal(true);
}
decimal highSeviye = decimal.MaxValue, lowSeviye = decimal.MinValue;
public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
var barDataModel = GetBarData();
var fr = williamFractial.Value[0][williamFractial.CurrentIndex - Period];
var high = barDataCurrentValues.LastUpdate.High;
var low = barDataCurrentValues.LastUpdate.Low;
if (fr != 0)
{
var prevHigh2 = Ref(barDataModel, OHLCType.High, Period);
var prevLow2 = Ref(barDataModel, OHLCType.Low, Period);
if (fr == prevHigh2)
{
highSeviye = prevHigh2;
}
if (fr == prevLow2)
{
lowSeviye = prevLow2;
}
}
if (high>highSeviye && LastOrderSide.Obj != Side.Buy)
{
SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
Debug("Alış emri gönderildi.");
Debug("High: " + high + " highSeviyessi: " + highSeviye);
highSeviye = decimal.MaxValue;
lowSeviye = decimal.MinValue;
}
if (lowSeviye>low && LastOrderSide.Obj != Side.Sell)
{
SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
Debug("Satış emri gönderildi.");
Debug("Low: " + low + " lowSeviyessi: " + lowSeviye);
highSeviye = decimal.MaxValue;
lowSeviye = decimal.MinValue;
}
}
}
}
İyi çalışmalar.
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ı