Подскажите, как можно для ТЕСТЕРА прописать условие определения номера бара младшего таймфрейма внутри текщего.
Например: в тестере запущен H1, затем определяется время начала n-ой свечи на тек тф, на следующем шаге надо определить номер свечи, которая началась в это же время, но на таймфрейм ниже. iBarShift постоянно пишет 0. Блок отвечающий за расчёт бара ниже:
Так нельзя делать. В тестере надо запускать сова на минимально используемом в этом сове ТФ-ме по ценам открытия. Лучше пускать по опен на минутках. Причём прописывать ТФ лучше всего - ЯВНО!
Хочу сделать мультитаймфреймную МА, которая изменяет свой цвет при смене динамики. Отображение средней цены с других ТФ сделал, но как решить задачу со сменой цвета разобраться пока не получается.
//+------------------------------------------------------------------+//| MA-MTFC.mq4 |//| Copyright 2012, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2012, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"#property indicator_chart_window#property indicator_buffers 3#property indicator_color1 Yellow#property indicator_color2 Green#property indicator_color3 Red//+------------------------------------------------------------------+externint MA_TF=1440;
externint MA_Period=89;
externint MA_Shift=0;
externint MA_Method=2;
externint MA_AP=0;
//+------------------------------------------------------------------+double Buffer_Yellow[];
double Buffer_Lime[];
double Buffer_Red[];
string Symb;
double MA;
int init()
{
Symb=Symbol();
//---if (MA_TF != 1)
if (MA_TF != 5)
if (MA_TF != 15)
if (MA_TF != 30)
if (MA_TF != 60)
if (MA_TF != 240)
if (MA_TF != 1440)
if (MA_TF != 10080)
if (MA_TF != 43200)
if (MA_TF != 0)
return;
//---SetIndexBuffer(0,Buffer_Yellow);
SetIndexBuffer(1,Buffer_Lime);
SetIndexBuffer(2,Buffer_Red);
//---SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
//---return(0);
}
int deinit()
{
return(0);
}
int start()
{
double MA;
int counted_bars=IndicatorCounted();
int limit=Bars-counted_bars-1;
if (limit>1)
limit=Bars-1;
for(int i=limit-1;i>=0;i--)
{
int pos=iBarShift(NULL, MA_TF, Time[i]);
MA=iMA(Symb,MA_TF,MA_Period,MA_Shift,MA_Method,MA_AP,pos);
Buffer_Yellow[i]=MA;
Buffer_Lime[i]=MA;
Buffer_Red[i]=MA;
if(Buffer_Yellow[i]>Buffer_Yellow[i+1])
{
Buffer_Red[i]=EMPTY_VALUE;
}
elseif(Buffer_Yellow[i]<Buffer_Yellow[i+1])
{
Buffer_Lime[i]=EMPTY_VALUE;
}
else
{
Buffer_Red[i]=EMPTY_VALUE;
Buffer_Lime[i]=EMPTY_VALUE;
}
}
return(0);
}
Roman.: Так нельзя делать. В тестере надо запускать сова на минимально используемом в этом сове ТФ-ме по ценам открытия. Лучше пускать по опен на минутках. Причём прописывать ТФ лучше всего - ЯВНО!
Роман, пытаюсь сделать так, чтобы индикатор мог отображаться в тестере, до советника пока как до Китая на почтовом поезде. Для анализа индикатор использует младшие тф.
FAQ: Лучше будет если вы покажете полный код, и вставите его при помощи кнопки "SRC"
хорошо, попробую добавить код к этому посту.
Я вообще-то знаю, чего хочу добиться в конце - торгую давно, а вот программировать только начал после того как понял что именно я хочу запрограммировать.
Моя цель сейчас получить зеленую стрелку на каждом закрытии бара выше всех трех скользящих и красную на каждом закрытом баре который закрылся ниже всех трех и только для баров закрытых после прикрепления к графику. Текущий бар меня не интересует.
Я хочу чтобы эти стрелки находились на графике пока индикатор к нему прикреплен, а потом убирались.
Я рисую скользящие сейчас только для наглядности а потом уберу их из советника.
Что получается сейчас - скользящие есть, какие-то стрелки есть, но они то появляются, то исчезают и возникают не над теми барами. Вот этого-то я и не понимаю.
Думаю, что я напутал что-то с j или j+1 в линиях 106-111 и к какому элементу буфера их прицепить.
Спасибо если подскажете.
почему-то кнопка SRC не работает. попробую вставить файл как обычный mq4
Доброго дня этой ветке! Вы знаете, индикатор компилируется, но ничего не чертит, и я совиршено не знаю, в чем дело, что думать, как искать ошибку. В общем, код работал, я с минимальными изминениями добавил ему функцию, он типерь вообще ничего не делает!!
Может, проблема где-то в обьявлениях, что начинаюца с решотки, может я вообще круто торможу мозгами и че-то напутал.. Так работал же!
//+------------------------------------------------------------------+//| ИндюкДимонакомпил.mq4 |//| Copyright 2012, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2012, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"#import "user32.dll"int PostMessageA(int hWnd,int Msg,int wParam,string lParam);
#import#define WM_COMMAND 0x0111int delimiter = 0;
#property indicator_chart_windowdouble ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
double вершина;
double основание_первого_снижения;
double начало;
double вершина_волны_3;
externint T=4,K=200;
int timeframe, start ;
int бар_вершина ;
int бар_основание_первого_снижения;
int бар_начало;
int pereklutsatel;
double naklon,linija2; int P;externint RO=49;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicators//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
int counted_bars=IndicatorCounted();
int limit=Bars-counted_bars-1;
for (int i=limit;i>=0;i--) {
//----for ( int J=0;J<=RO;J++){
//----// for(int i=Bars; i>=0;i--)
i=Bars;
бар_вершина=iHighest( NULL, timeframe, MODE_HIGH, K, start ) ;
вершина =High[ бар_вершина ];
бар_основание_первого_снижения=iLowest( NULL, timeframe, MODE_LOW,NormalizeDouble ( бар_вершина/2,0), start ) ;
основание_первого_снижения=Low[ бар_основание_первого_снижения ];
бар_начало=iLowest( NULL, timeframe, MODE_LOW,NormalizeDouble (бар_вершина*1.5,0), бар_вершина ) ;
начало=Low[ бар_начало ];
if(начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
НижняячертаBuffer2[бар_начало]=начало;linija2=начало;for(i=бар_начало-1;i>=0;i--){linija2=linija2-naklon;
НижняячертаBuffer2[i]=linija2;
}
НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
for (i=0;i<100;i++){ СинняячертаBuffer3[i]= Open[i];}
for (i=330;i<500;i++){ СинняячертаBuffer3[i]= Open[i];}
ВерхняячертаBuffer1[бар_начало]=начало;
double точка4; int бар_точка4; бар_точка4=iHighest( NULL, timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ;
точка4 =High[ бар_точка4 ];
if(вершина>точка4){naklon=(начало-точка4)/(бар_начало-бар_точка4);
double linija1=начало;for(i=бар_начало-1;i>=0;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
double vulf=НижняячертаBuffer2[0];
if ( vulf==Ask&&vulf==Bid)vulf=1;
else{ for (vulf=vulf+Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf-Point){
if ( vulf==Ask&&vulf==Bid){vulf=1;}}
for (vulf=vulf-Point*10; vulf==НижняячертаBuffer2[0];vulf=vulf+Point){
if ( vulf==Ask&&vulf==Bid)vulf=1;}
}
if (vulf==1){Comment (" Есть вульв!!! " , " timeframe " , timeframe);return(0); }
if (vulf!=1&&pereklutsatel==1) {
if(delimiter<3){delimiter++;Comment(delimiter);return(0);}
delimiter=0;
fChangePeriod();P++;
} } }
//----return(0);
}
//+------------------------------------------------------------------+void fChangePeriod(){int ii,hwd = WindowHandle(Symbol(),Period());
switch(Period()){
casePERIOD_W1 : ii = 33134; break; //PERIOD_D1;casePERIOD_D1 : ii = 33136; break; //PERIOD_H4;casePERIOD_H4 : ii = 33135; break; //PERIOD_H1;casePERIOD_H1 : ii = 33140; break; //PERIOD_M30;casePERIOD_M30 : ii = 33139; break; //PERIOD_M15;casePERIOD_M15 : ii = 33138; break; //PERIOD_M5;casePERIOD_M5 : ii = 33137; break; //PERIOD_M1;casePERIOD_M1 : ii = 33141; break; //PERIOD_W1;
}
PostMessageA(hwd, WM_COMMAND, ii, 0);
return;
}
Подскажите, как можно для ТЕСТЕРА прописать условие определения номера бара младшего таймфрейма внутри текщего.
Например: в тестере запущен H1, затем определяется время начала n-ой свечи на тек тф, на следующем шаге надо определить номер свечи, которая началась в это же время, но на таймфрейм ниже. iBarShift постоянно пишет 0. Блок отвечающий за расчёт бара ниже:
Юрий, можете подсказать что-нибудь по моему вопросу, который чуть выше?
Скрипт для проверки
Результат
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 1 TimeOpen: 00:00 Bar: 1057
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 5 TimeOpen: 00:00 Bar: 212
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 15 TimeOpen: 00:00 Bar: 70
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 30 TimeOpen: 00:00 Bar: 35
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 60 TimeOpen: 00:00 Bar: 17
2012.07.17 20:42:45 VininI_CheckTime EURUSD,Daily: TimeFrame: 240 TimeOpen: 00:00 Bar: 4
Подскажите, пожалуйста:
Хочу сделать мультитаймфреймную МА, которая изменяет свой цвет при смене динамики. Отображение средней цены с других ТФ сделал, но как решить задачу со сменой цвета разобраться пока не получается.
Так нельзя делать. В тестере надо запускать сова на минимально используемом в этом сове ТФ-ме по ценам открытия. Лучше пускать по опен на минутках. Причём прописывать ТФ лучше всего - ЯВНО!
Лучше будет если вы покажете полный код, и вставите его при помощи кнопки "SRC"
хорошо, попробую добавить код к этому посту.
Я вообще-то знаю, чего хочу добиться в конце - торгую давно, а вот программировать только начал после того как понял что именно я хочу запрограммировать.
Моя цель сейчас получить зеленую стрелку на каждом закрытии бара выше всех трех скользящих и красную на каждом закрытом баре который закрылся ниже всех трех и только для баров закрытых после прикрепления к графику. Текущий бар меня не интересует.
Я хочу чтобы эти стрелки находились на графике пока индикатор к нему прикреплен, а потом убирались.
Я рисую скользящие сейчас только для наглядности а потом уберу их из советника.
Что получается сейчас - скользящие есть, какие-то стрелки есть, но они то появляются, то исчезают и возникают не над теми барами. Вот этого-то я и не понимаю.
Думаю, что я напутал что-то с j или j+1 в линиях 106-111 и к какому элементу буфера их прицепить.
Спасибо если подскажете.
почему-то кнопка SRC не работает. попробую вставить файл как обычный mq4
Скрипт для проверки
Решил подправить ваш код и сделать проверку в соответствии со своими целями (запускал на Н1).
и вот что вышло
Решил подправить ваш код и сделать проверку в соответствии со своими целями (запускал на Н1).
и вот что вышло
Проверяете в тестере по ценам открытия. Так Роман уже написал как нужно делать.
Цена закрытия прошлого бара Close[1]
Доброго дня этой ветке! Вы знаете, индикатор компилируется, но ничего не чертит, и я совиршено не знаю, в чем дело, что думать, как искать ошибку. В общем, код работал, я с минимальными изминениями добавил ему функцию, он типерь вообще ничего не делает!!
Может, проблема где-то в обьявлениях, что начинаюца с решотки, может я вообще круто торможу мозгами и че-то напутал.. Так работал же!