//+------------------------------------------------------------------+
//| S-RoC.mq4 |
//| Copyright (C) 2009 DragoTrade |
//| Licensed under GNU General Public License |
//+------------------------------------------------------------------+
#property copyright "DragoTrade"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Yellow
//---- input parameters
extern int MA_Period=13;
extern int ROC_Period=21;
//---- buffers
double b[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,b);
IndicatorShortName("S-RoC("+MA_Period+", "+ROC_Period+")");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i=Bars-(ROC_Period+MA_Period)-1;
double t,curr,prev;
while(i>=0)
{
curr=iMA(NULL,0,MA_Period,0,MODE_EMA,PRICE_CLOSE,i);
prev=iMA(NULL,0,MA_Period,0,MODE_EMA,PRICE_CLOSE,i+ROC_Period);
if(prev!=0)
{
t=(curr-prev)/prev;
}
b[i]=t;
i--;
}
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+ //| S-RoC2.mq4 | //| | //| | //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Yellow //---- input parameters extern int MA_Period=40; extern int ROC_Period=40; extern string Symbols="EURUSD"; //---- buffers double b[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,b); IndicatorShortName("S-RoC2("+MA_Period+", "+ROC_Period+")"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i=Bars-(ROC_Period+MA_Period)-1; double t,curr,prev; while(i>=0) { curr=iMA(Symbols,0,MA_Period,0,MODE_EMA,PRICE_CLOSE,iBarShift(Symbols,0,Time[i],FALSE)); prev=iMA(Symbols,0,MA_Period,0,MODE_EMA,PRICE_CLOSE,iBarShift(Symbols,0,Time[i+ROC_Period],FALSE )); if(prev!=0) { t=(curr-prev)/prev; } b[i]=t; i--; } //---- //---- return(0); } //+-----------------------------------------------------------------+
david2:
Вы используете счетчик баров Bars текущего символа, попробуйте использовать iBars;
hlaiman:
Вы используете счетчик баров Bars текущего символа, попробуйте использоватьiBars;
Вы используете счетчик баров Bars текущего символа, попробуйте использоватьiBars;
Сделал ничего не изменилось, и индикатор начал сильно тормозить.
//+------------------------------------------------------------------+ //| S-RoC3.mq4 | //| | //| | //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Yellow //---- input parameters extern int MA_Period=40; extern int ROC_Period=40; extern string symbol="EURUSD"; extern int timeframe=PERIOD_M1; //---- buffers double b[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,b); IndicatorShortName("S-RoC3("+MA_Period+", "+ROC_Period+")"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i= iBars(symbol,timeframe)-(ROC_Period+MA_Period); double t,curr,prev; while(i>0) { curr=iMA(symbol,timeframe,MA_Period,0,MODE_EMA,PRICE_CLOSE,iBarShift(symbol,timeframe,Time[i],FALSE)); prev=iMA(symbol,timeframe,MA_Period,0,MODE_EMA,PRICE_CLOSE,iBarShift(symbol,timeframe,Time[i+ROC_Period],FALSE )); if(prev!=0) { t=(curr-prev)/prev; } b[i]=t; i--; } //---- //---- return(0); } //+------------------------------------------------------------------+
Есть еще 1 особенность. Уже после того как индикатор выдает 0, останавливаю тестирование и просто открываю и закрываю окно свойств . После этого линия перерисовывается и принимает правильную форму. То есть сбрасывается буфер индикатора. Как сбрасывать буфер на каждом баре?
david2:
Есть еще 1 особенность. Уже после того как индикатор выдает 0, останавливаю тестирование и просто открываю и закрываю окно свойств . После этого линия перерисовывается и принимает правильную форму. То есть сбрасывается буфер индикатора. Как сбрасывать буфер на каждом баре?
Есть еще 1 особенность. Уже после того как индикатор выдает 0, останавливаю тестирование и просто открываю и закрываю окно свойств . После этого линия перерисовывается и принимает правильную форму. То есть сбрасывается буфер индикатора. Как сбрасывать буфер на каждом баре?
while(i>0) {
if(i<=1) b[i]=EMPTY_VALUE;
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте! Решил сделать мультивалютный индикатор для тестера на базе S-Roc. Для начала решил сделать с одной линией, чтобы на графике EURUSD наблюдать линию с графика EURGBP. Если параметр ROC_Period установить 40, то через 40 баров после начала теста линия индикатора сходится с нулевым уровнем и больше не меняется. Если установить 10 то прилипнет к нулю через 10 баров.
S-Roc это оригинал, S-Roc2 моя переделка. Если кто поможет разобраться буду благодарен. Или если можно дайте ссылку на мультивалютный индикатор работающий в тестере, чтобы посмотреть код. Я ни одного не нашел. Первая красная линия это начало теста, а вторая момент схождения с нулевой. Схождение произошло через 40 баров.