Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 392

 
Snower: Желтая линия - канал цены, который цена должна пробить, и что б заказ открывался свечей со смайлом, а все те, которые были раньше - игнорировал

в Вашем куске кода ценовой канал - channel_top и channel_bottom, которые определены выше? А где определение пин-бара?

 
Vitaly Muzichenko:

Ответить

Артём, вы не внимательно прочли: ТС нужно открыть только при пробитии пин-баром, соответственно если прописать пин-бар(малое тело и большие тени), то условие можно соблюсти

Виталий, я вот на это отвечал:

...а все те, которые были раньше - игнорировал...

Если все, которые были раньше, были пин-барами, то как их игнорировать, когда они в свою бытность текущими, являлись пин-баром, пересекающим линию?

 
Sergey Likho:

Как обрабатывается функция  iCustom в МТ4?  Прошу ответить тех кто в теме!


например в тестере стратегий советник обращается к индикатору на каждом тике.

При вызове функции, индикатор загружается в память, пересчитывает все значения от нулевого бара до Bars, а потом возвращает значение с нужным смещением.

Если я на первом тике запрошу значение в 1 баре, на втором тике - значение второго бара, то советник будет дважды рассчитывать индикатор на всей истории?


Если советник обращается к индикатору1, а у него стоит iCustom на индикатор 2.   Сколько раз будет пересчитываться индикатор2 при запросе значения индикатора1?


Может быть тестер стратегий и терминал МТ4 как то хранят значения индикаторов на каждом баре, чтоб при повторном запросе не пересчитывать их?

Всё зависит от реализации индикатора. Если расчёт организован верно, то индикатор просчитывает только текущий бар - остальные просчитаны были при (rates_total-prev_calculate)>1

 

как провести среднюю iMAOnArray по массиву, если в массиве есть значения EMPTY_VALUE ?

 
Максим Дмитриев:

как провести среднюю iMAOnArray по массиву, если в массиве есть значения EMPTY_VALUE ?


понял! напишу, что если хоть одно значение из усредняющей выборки равно  EMPTY_VALUE , то и значение iMAOnArray в этой точке будет равно  EMPTY_VALUE.

 

Всем доброго времени суток. Я тестирую советника. При помощи него я не собираюсь торговать.Но только проверить некоторую закономерность. Советник открывает ордер на каждой минутной свече.Если ордер закрылся по СЛ, по цене закрытия ордера по СЛ открыть другой ордер BUY 


int start()                                             
{
if(Bid == iOpen(NULL,PERIOD_M1,0))
if ( G != Minute() )
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,Y10,123 );
G  =  Minute();
}
////*******   Если в списке закрытых ордеров есть ордер закрытый по СЛ - открыть другой ордер
int Счетф=0,  Номерф=OrdersHistoryTotal()-1;
for( ; Номерф>=0; Номерф--)
{
if(!OrderSelect(Номерф, SELECT_BY_POS, MODE_HISTORY)) continue;
if(OrderProfit()>=0) break;
Счетф++;
if(Счетф>0)
if(TimeCurrent()==OrderCloseTime())
OrderSend(Symbol(),OP_BUY,1,Ask,1,Bid-400*Point,Bid+200*Point,Y11,123 );
}
return;
}

Проблема.. Если на одном тике закрылось несколько ордеров и последний из них закрылся по ТР, то нужный мне ордер BUY не открывается. Потому что программа считает, что последним закрылся ордер по ТР, а не по СЛ. Вот пример такой ситуации

13:38:15.859    2008.01.02 15:01:46  Tester: stop loss #232 at 1.46566 (1.46560 / 1.46562)

13:38:15.859    2008.01.02 15:01:46  Tester: stop loss #233 at 1.46566 (1.46560 / 1.46562)
13:38:15.859    2008.01.02 15:01:46  Tester: take profit #302 at 1.46562 (1.46560 / 1.46562)
13:38:15.859    2008.01.02 15:02:00  MACD Sample EURUSD,M1: open #347 sell 0.10 EURUSD at 1.46570 sl: 1.46972 tp: 1.46372 ok
Подскажите пожалуйста какую языковую конструкцию нужно применить, что бы на одном тике ордер BUY открывался сразу после закрытия ордера по СЛ на том же тике, на котором закрылся ордер по СЛ.

Спасибо.

 

Здравствуйте!

Уже всю голову сломал. Как проверить есть или нет определённая цена в массиве double?

Я написал так для теста:


double prmas[5] = {11,22,33,44,99};

ArrayBsearch(prmas,OrderOpenPrice(),WHOLE_ARRAY,0,MODE_ASCEND));


11, 22, 33, 44 -- скрипт находит без проблем (такие ордера есть в терминале). А вот если он обрабатывает цену 45, например, то всё равно выдаёт 3 (позицию цены 44 в массиве).

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

 

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

   string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
   string file_name=terminal_data_path+"\\MQL4\\Files\\VolC(Symbol(),Period())";
   int file_handle=FileOpen(file_name,FILE_READ|FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,(double)V5);
   FileClose(file_handle);
 
YarTrade:  Добрый день. Подскажите, пжлста, почему не происходит создания файла и записи в него данных:

Осмотрите внимательно папку Files!!! Запись всегда производится в песочницу = папку File . Попробуйте так:

   string file_name=VolC(Symbol(),Period());  // А кто такой ВолК = VolC  ???
   int file_handle=FileOpen(file_name,FILE_READ|FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,(double)V5);
   FileClose(file_handle);
 
STARIJ:

Осмотрите внимательно папку Files!!! Запись всегда производится в песочницу = папку File . Попробуйте так:


VolC - я так файл назвал. Разве название файла не нужно?

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