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

 
drknn:
Большое спасибо за помощь =)
 
Alexandr24:
Большое спасибо за помощь =)


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

И ещё, сообщения индикатора, как ни странно, пишутся в тестере не в тестерные журналы, а в журналы работы реалтайма.

 
Как при тестировании советника в тестере учитывать комиссию?
 
Вроде бы учитывается, поскольку тестер использует все настройки конкретного брокера. Точнее скажет поиск.
http://www.google.ru/search?as_sitesearch=mql4.com&as_q=%EA%EE%EC%E8%F1%F1%E8%FF+%E2+%F2%E5%F1%F2%E5%F0%E5
 
Abzasc:

"В лоб" задача не решается.

Можно так

Или вот еще нашел


спасибо!
 

Я не вполне понимаю,как работают условия.

Я решил разобрать,как работает индикатор фракталов,отличие MODE_UPPER и MODE_LOWER,и написал такую фигню

int start()
{int y;
y= WindowFirstVisibleBar();Alert ("y",y);
for (;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);}}

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

Это вроде || знак или,оператор вроде делает написанное в скобкаххъ {} если хоть одно из условий верно,или верны оба сразу,так ведь?или нет?

У меня Вообще ничего не поменялось!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Вроде,все верно написано.Помогите!!!!!!!!Разьясните!!!!!!!

 
Dimka-novitsek:

Я не вполне понимаю,как работают условия.

Я решил разобрать,как работает индикатор фракталов,отличие MODE_UPPER и MODE_LOWER,и написал такую фигню

int start()
{int y;
y= WindowFirstVisibleBar();Alert ("y",y);
for (;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);}}

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

Это вроде || знак или,оператор вроде делает написанное в скобкаххъ {} если хоть одно из условий верно,или верны оба сразу,так ведь?или нет?

У меня Вообще ничего не поменялось!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Вроде,все верно написано.Помогите!!!!!!!!Разьясните!!!!!!!



нормально код размещайте через контр-альт - М - быстрее получите ответ...без восклицаний.
 
через контр-альт - М - А подробнее?
 
Dimka-novitsek:

Это вроде ||

https://docs.mql4.com/ru/basis/operations/bool

Логическая операция ИЛИ..

Зы контр-альт - М - это как SRC нажать кнопочку и код через нее вставить.

 
drknn:

Пробовал я крутить тот код, котоый вы мне предложили. Результат всегда один и тот же - продолжает открывать сделки в течение дня. Повторюсь, что хотелось бы сохранить возможность включения/выключения.

Вот перепробованые варианты:

extern bool WaitForNewDay = true;

void init()

{

SMB=Symbol();

return;

}

void start()

{

bool Trade=true;

if(WaitForNewDay){if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)!=0) Trade=false;}

if(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen(); return;}

}

//-----------------------------------------------------------------

int HistoryBuy(int MAGICMA)

{int BuyOrders=0;

for (int i=OrdersHistoryTotal()-1;i>=0;i--) {

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

Print(" ",GetLastError()," ",i);

}

else {

if(OrderSymbol()!= SMB || OrderMagicNumber()!= MAGICMA){ continue;}

if(OrderType()==OP_BUY){

if(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){

BuyOrders++;

}

}

}

}

return(BuyOrders);

}

//-----------------------------------------------------------------

int HistorySell(int MAGICMA){

int SellOrders=0;

for (int i=OrdersHistoryTotal()-1;i>=0;i--){

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){

Print(" ",GetLastError()," ",i);

}

else {

if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGICMA){ continue;}

if(OrderType()==OP_SELL){

if(OrderOpenTime()>=iTime(SMB,PERIOD_D1,0)){

SellOrders++;

}

}

}

}

return(SellOrders);

}

//////////////Другой вариант/////////////////////

extern bool WaitForNewDay = true;

Trade=true;

void init()

{

SMB=Symbol();

if(WaitForNewDay) {Trade=false;}

return;

}

void start()

{

if(WaitForNewDay) {if(HistoryBuy(MAGICMA)+HistorySell(MAGICMA)==0) Trade=true;}

if(CalculateCurrentOrders(Symbol())==0 && Trade)

{CheckForOpen(); Trade=false; return;}

}

Причина обращения: