[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 1129

 

Объясните пожалуйста, почему в итоге в окне индикатора ничего не отображается.

Код:

 

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- buffers
double Buf_0[];

int init()
{
//---- indicators

SetIndexBuffer(0,Buf_0);
SetIndexStyle(0,DRAW_LINE, STYLE_SOLID,2);
//----
return(0);
}

int start()
{
int i, counted_bars=IndicatorCounted();
i=Bars-counted_bars-1;


while(i>=0)
{
Buf_0[i]=Close[i]/Close[i+1];
i--;
}
return(0);
}
//+------------------------------------------------------------------+
 

 
Abzasc:
Там, где ??? точно правильно?


Вот это условие должно фильтровать if (up>=1||down>=1),алерты,хоть один из них,должн быть больше ноля,а это не так.

Вот

 
Dimka-novitsek:


Вот это условие должно фильтровать if (up>=1||down>=1),алерты,хоть один из них,должн быть больше ноля,а это не так.

Вот


int start()
{int y;
y= WindowFirstVisibleBar();Alert ("y",y);
for (y=1;y>=0;y--) // первое выражение 
{ double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y);
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y);
if (up>=1||down>=1){
Alert("Previous upper fractal is:", up, " Previous lower fractal is:", down);Alert ("y",y);}}

return(0);
}
 
Galion:


Вы просто разделили окно редактора на две части :) Ладно, Бог с ним, с двойным кликом. Вы поставили подсветку синтаксиса файлов MQL4? Если нет, то, открыв файл с исходным MQL-кодом, нужно в редакторе нажать Синтаксис - и в самом низу списка выбрать MQL4 - подсветка будет точно такая же как в метаэдиторе

 
Но я не пойму,где у меня ошибка?
 
Не,for Само собой,но игнорирование или же написание в нем y=1 ничего не меняет,я проверил!
 
Dimka-novitsek:
Но я не пойму,где у меня ошибка?

Убрал лишнее

int start()
{int y;
y= WindowFirstVisibleBar();Alert ("y",y);
// for (y=5;y>=0;y--)
//{ 
double up=iFractals(Symbol(),PERIOD_M15,MODE_UPPER,y);
double down=iFractals(Symbol(),PERIOD_M15,MODE_LOWER,y);
if (up>=1||down>=1){
Alert("Previous upper fractal is:", up, " Previous lower fractal is:", down);Alert ("y",y);}
//}
//----

//----
return(0);
}

получилось так

Оно?

 
dzhini:

Скорее всего некорректно поставил вопрос. Торговля идёт на часовом таймфрэйме время когда произойдёт сделка неизвестно, но необходимо, чтобы она была одна в течение дня. При этом хотелось бы эту возможность сделать переключаемой. Может есть у кого такой кусочек кода?


Не нужно искать кусочек кода - в таких поисках можно всю жизнь провести и так и ни чего не найти. Нужно искать способ построить кусочек кода самостоятельно. Код я Вам дал не для тупого его копирования, а для того, чтоб Вы разобрались в нём от и до, тем более, что он простенький. Код работает следующим образом. Он проходит по списку ордеров рыночных и суммирует их количество с ордерами истории, открытыми сегодня. Если сумма больше нуля, то сегодня ордера уже были и торг запрещён. Если Вам нужен переключатель, который позволяет учитывать, сколько же ордеров можно открывать сегодня, то его при помощи простых операций можо прикрутить к коду. Ваша беда в том, что у Вас нет в голове алгоритма работы Вашей программы - Вы совершенно не понимаете, как и в какой последовательности должна работать Ваша прога. Составьте алгоритм, иначе в голове будет каша.

 
Ну вот, поговорил с вами и сразу всё понял ))) посмотрел подправил - вы были правы (я не мог выпрыгнуть из своего алгоритма решения задачи). Спасибо за все подсказки. Теперь уже разобрался со всеми предложеными вариантами: в каких случаях какой работает.
 
dzhini:
Ну вот, поговорил с вами и сразу всё понял ))) посмотрел подправил - вы были правы (я не мог выпрыгнуть из своего алгоритма решения задачи). Спасибо за все подсказки. Теперь уже разобрался со всеми предложеными вариантами: в каких случаях какой работает.

Учтите, что в циклах перебора ордеров, которые я Вам показал, не учитывается магик ордера - эт такой признак, по которому советник может отличать свои ордера от чужих. Смотрите, МАГИК - это число, которое советник может присвоить ордеру при его открытии - всем своим ордерам один и тот же номер (ну, или если нужно, то разные номера, генерируемые автоматически). У ордеров, которые трейдер открывает вручную, магик всегда равен нулю! Это говори о том, что если в советника вставить магик = 0, то советник будет вмешиваться в ручные торги трейдера. Если нужно, чтоб советник не трогал ордеров трейдера и манипулировал только своими, то нужно поставить магик, отличный от нуля. В этом случае, все ордера, у которых нет такого мгика, советник воспримет как чужие и не тронет.