Kime soralım? Bir kartvizit ver de götürelim referans olarak :yahoo:
Printable View
Matriks için şöyle bir kod var...:
Kod:
using System;using System.Collections.Generic;using System.Linq;using Matriks.Data.Symbol;using System.Windows.Media;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;namespace Matriks.Lean.Algotrader{ publicclass SuperTrends : 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")] publicstring Symbol; [Parameter(SymbolPeriod.Min5)] public SymbolPeriod SymbolPeriod; [Parameter(5)] publicdecimal BuyOrderQuantity; [Parameter(5)] publicdecimal SellOrderQuantity; [Parameter(SymbolPeriod.Min60)] public SymbolPeriod SuperTrendSymbolPeriod; [Parameter(10)] publicint SuperPeriod; [Parameter(3)] publicint Coeff; // indikator tanımları. SuperTrend superTrend; /// <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>publicoverridevoidOnInit() { AddSymbol(Symbol, SymbolPeriod); superTrend = SuperTrendIndicator(Symbol, SuperTrendSymbolPeriod, SuperPeriod, Coeff); // Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir. WorkWithPermanentSignal(true); //Eger 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); } /// <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>publicoverridevoidOnDataUpdate(BarDataCurrentValues barDataCurrentValues) { var barDataModel = GetBarData(); if (CrossAbove(barDataModel, superTrend, OHLCType.Close)) { SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy); Debug("Alış Emri Gönderildi"); } if (CrossBelow(barDataModel, superTrend, OHLCType.Close)) { SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell); Debug("Satış Emri Gönderildi"); } } /// <summary>/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir./// </summary>/// <param name="barData">Emrin son durumu</param>publicoverridevoidOnOrderUpdate(IOrder order) { if (order.OrdStatus.Obj == OrdStatus.Filled) { } } }}
Bildiğim kadarı ile MS e yakındı Matriks...
Ama bunu da çevirmek lazım tabiii...
Class lar vb hep Matriks için.
Du bi araştırayım ben..
MTF olmayanı şöyle imiş.
Şimdilik bunu ekle kurcala bakalım...
Kafana yatarsa bi yol buluruz.
Kod:
//+------------------------------------------------------------------+
//| SuperTrend.mq4 v1.2 |
//| Copyright © 2008, Jason Robinson (jnrtrading). |
//| http://www.spreadtrade2win.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Jason Robinson."
#property link "http://www.spreadtrade2win.com"
#property indicator_chart_window
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_buffers 2
double TrendUp[], TrendDown[];
int changeOfTrend;
extern int Nbr_Periods = 10;
extern double Multiplier = 3.0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexBuffer(0, TrendUp);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexLabel(0, "Trend Up");
SetIndexBuffer(1, TrendDown);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
SetIndexLabel(1, "Trend Down");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int limit, i, flag, flagh, trend[5000];
double up[5000], dn[5000], medianPrice, atr;
int counted_bars = IndicatorCounted();
//---- check for possible errors
if(counted_bars < 0) return(-1);
//---- last counted bar will be recounted
if(counted_bars > 0) counted_bars--;
limit=Bars-counted_bars;
//Print(limit);
//----
for (i = Bars; i >= 0; i--) {
TrendUp[i] = EMPTY_VALUE;
TrendDown[i] = EMPTY_VALUE;
atr = iATR(NULL, 0, Nbr_Periods, i);
//Print("atr: "+atr);
medianPrice = (High[i]+Low[i])/2;
//Print("medianPrice: "+medianPrice);
up[i]=medianPrice+(Multiplier*atr);
//Print("up: "+up);
dn[i]=medianPrice-(Multiplier*atr);
//Print("dn: "+dn);
trend[i]=1;
if (Close[i]>up[i+1]) {
trend[i]=1;
if (trend[i+1] == -1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (Close[i]<dn[i+1]) {
trend[i]=-1;
if (trend[i+1] == 1) changeOfTrend = 1;
//Print("trend: "+trend);
}
else if (trend[i+1]==1) {
trend[i]=1;
changeOfTrend = 0;
}
else if (trend[i+1]==-1) {
trend[i]=-1;
changeOfTrend = 0;
}
if (trend[i]<0 && trend[i+1]>0) {
flag=1;
//Print("flag: "+flag);
}
else {
flag=0;
//Print("flagh: "+flag);
}
if (trend[i]>0 && trend[i+1]<0) {
flagh=1;
//Print("flagh: "+flagh);
}
else {
flagh=0;
//Print("flagh: "+flagh);
}
if (trend[i]>0 && dn[i]<dn[i+1])
dn[i]=dn[i+1];
if (trend[i]<0 && up[i]>up[i+1])
up[i]=up[i+1];
if (flag==1)
up[i]=medianPrice+(Multiplier*atr);
if (flagh==1)
dn[i]=medianPrice-(Multiplier*atr);
//-- Draw the indicator
if (trend[i]==1) {
TrendUp[i]=dn[i];
if (changeOfTrend == 1) {
TrendUp[i+1] = TrendDown[i+1];
changeOfTrend = 0;
}
}
else if (trend[i]==-1) {
TrendDown[i]=up[i];
if (changeOfTrend == 1) {
TrendDown[i+1] = TrendUp[i+1];
changeOfTrend = 0;
}
}
}
WindowRedraw();
//----
return(0);
}
Daha güncel ve kısa hali:
Kod:Mult:= Input("ATR Multiplier",0.1,3,1);
Nb:= Input("NbPeriods",1,8,8);
x:= Input("Price:[1](H+L)/2 [2]Close",1,2,1);
TruRan:= Wilders(ATR(1),Nb)*Mult;
HiLimit:=If(x=1,(H+L)/2-TruRan,C-TruRan);
LoLimit:=If(x=1,(H+L)/2+TruRan,C+TruRan);
LB:=If(HiLimit>=PREV AND HiLimit<c,HiLimit,If(C<prev,HiLimit-0.1,PREV));
UB:=If(LoLimit<prev AND LoLimit>C,LoLimit,If(C>PREV,LoLimit+0.1,PREV));
Trend:=If(UB>Ref(UB,-1),1,If(LB<ref(LB,-1),-1,PREV));
Super:=If((Trend=1 AND Ref(Trend,-1)=-1) OR (Trend=1 OR Trend=0),LB,UB);
Super;
Olmadı üstadım hata veriyor, kod çok uzun...
Evet abi.
Şuradan tırık:
http://SuperTrend Indicator - MetaStock.com Forum