void OnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10&&Hour()<11) return (0);
......остальной код, в частности для открытия....
}
выдает ошибку: 'return' - 'void' function returns a value
Vitaly Muzichenko:
voidOnTick()
{
......здесь работаем с закрытием (тралом и прочим)....
if (Hour()>=10 && Hour()<11) return;
......остальной код, в частности для открытия....
}
Здравствуйте, что с OrdersTotal()? Я всегда знал что она содержит количество ордеров -1, то есть OrdersTotal()-1 и всё работало, но стал писать программу и вдруг, один ордер перестал учитываться, запросил OrdersTotal() и он выдал общее кол-во ордеров = 3, а не 3-1. Что происходит?
Обычный вид цикла в справке:
int total=OrdersTotal(); for(int pos=0;pos<total;pos++) { }
То есть первый ордер идёт как нулевое значение.
Но по факту нет, первый ордер и идёт как 1, значит перебор надо начинать с единицы, а не с нуля? Метаквоты что-то начудили, или я туплю?
Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.
Maksim Mihajlov: Здравствуйте, что с OrdersTotal()? Я всегда знал что она содержит количество ордеров -1, то есть OrdersTotal()-1 и всё работало, но стал писать программу и вдруг, один ордер перестал учитываться, запросил OrdersTotal() и он выдал общее кол-во ордеров = 3, а не 3-1. Что происходит?
Обычный вид цикла в справке:
int total=OrdersTotal(); for(int pos=0;pos<total;pos++) { }
То есть первый ордер идёт как нулевое значение.
Но по факту нет, первый ордер и идёт как 1, значит перебор надо начинать с единицы, а не с нуля? Метаквоты что-то начудили, или я туплю?
Вы смешали в кучу ОТЛОЖЕННЫЕ ОРДЕРА и ПОЗИЦИИ. Прочтите справку. Сформилуйте точнее свой вопрос: что именно Вы пытаетесь посчитать: ОТЛОЖЕННЫЕ ОРДЕРА или ПОЗИЦИИ? И таки да, ничего не изменилось - первый индекс элемента начинается с '0'.
Вы смешали в кучу ОТЛОЖЕННЫЕ ОРДЕРА и ПОЗИЦИИ. Прочтите справку. Сформилуйте точнее свой вопрос: что именно Вы пытаетесь посчитать: ОТЛОЖЕННЫЕ ОРДЕРА или ПОЗИЦИИ? И таки да, ничего не изменилось - первый индекс элемента начинается с '0'.
Вот я сравнил два варианта, в первом применил OrdersTotal()-1 и начал перебор с нуля - получил ошибку Во втором варианте начал с единицы и взял целиком OrdersTotal(), - ошибки нет в этот раз
Смотрите скрины, там видно что OrdersTotal() отображает фактическое кол-во ордеров, а не OrdersTotal()-1 ...
Вопрос, почему OrdersTotal() выдаёт точное количество ордеров, а не -1, так и должно быть или это что то новое? Ведь в этом случае, перебор надо начинать не с нуля, а с единицы!
Вот я сравнил два варианта, в первом применил OrdersTotal()-1 и начал перебор с нуля - получил ошибку Во втором варианте начал с единицы и взял целиком OrdersTotal(), - ошибки нет в этот раз
Смотрите скрины, там видно что OrdersTotal() отображает фактическое кол-во ордеров, а не OrdersTotal()-1 ...
Вопрос, почему OrdersTotal() выдаёт точное количество ордеров, а не -1, так и должно быть или это что то новое? Ведь в этом случае, перебор надо начинать не с нуля, а с единицы!
Кажется я понял свою ошибку сорри... В этом условии идёт смещение на -1: if (OrderSelect(i-1,SELECT_BY_POS)==true){} Извините за тупость, взял строку из другой программы и не обратил внимание на смещение!
Здравстуйте. Нужна ваша помощь в корректировке индикатора. Суть индикатора такова. Рассчитать величину повышения цены относительно предыдущего бара. За ноль берётся бар звезда. То есть цена открытия равно цене закрытия. При компиляции ошибок нет, но при тестировании выдаёт ошибку на строке 80 20 символа. Так же криво отрисовываетсигнальную линию. Но думаю это причина именно в неправильном расчёте основного буфера. Помогите исправить.
Некоторые технические индикаторы имеют несколько отрисовываемых на графике буферов. Нумерация индикаторных буферов начинается с 0. При копировании значений индикатора функцией CopyBuffer() в массив типа double для некоторых индикаторов можно указывать не номер копируемого буфера, а идентификатор этого буфера.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Я всегда знал что она содержит количество ордеров -1, то есть OrdersTotal()-1 и всё работало, но стал писать программу и вдруг, один ордер перестал учитываться, запросил OrdersTotal() и он выдал общее кол-во ордеров = 3, а не 3-1.
Что происходит?
Обычный вид цикла в справке:
int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}
То есть первый ордер идёт как нулевое значение.
Но по факту нет, первый ордер и идёт как 1, значит перебор надо начинать с единицы, а не с нуля?
Метаквоты что-то начудили, или я туплю?
Здравствуйте, что с OrdersTotal()?
Я всегда знал что она содержит количество ордеров -1, то есть OrdersTotal()-1 и всё работало, но стал писать программу и вдруг, один ордер перестал учитываться, запросил OrdersTotal() и он выдал общее кол-во ордеров = 3, а не 3-1.
Что происходит?
Обычный вид цикла в справке:
int total=OrdersTotal();
for(int pos=0;pos<total;pos++)
{
}
То есть первый ордер идёт как нулевое значение.
Но по факту нет, первый ордер и идёт как 1, значит перебор надо начинать с единицы, а не с нуля?
Метаквоты что-то начудили, или я туплю?
Вы смешали в кучу ОТЛОЖЕННЫЕ ОРДЕРА и ПОЗИЦИИ. Прочтите справку. Сформилуйте точнее свой вопрос: что именно Вы пытаетесь посчитать: ОТЛОЖЕННЫЕ ОРДЕРА или ПОЗИЦИИ? И таки да, ничего не изменилось - первый индекс элемента начинается с '0'.
ДОбавлено: пример
Example: Calculate Positions and Pending Orders
Вы смешали в кучу ОТЛОЖЕННЫЕ ОРДЕРА и ПОЗИЦИИ. Прочтите справку. Сформилуйте точнее свой вопрос: что именно Вы пытаетесь посчитать: ОТЛОЖЕННЫЕ ОРДЕРА или ПОЗИЦИИ? И таки да, ничего не изменилось - первый индекс элемента начинается с '0'.
ДОбавлено: пример
Example: Calculate Positions and Pending Orders
Я имею ввиду MQL4, а не MQL5, тут нет разделения на отложки и рыночные!
Я имею ввиду MQL4, а не MQL5, тут нет разделения на отложки и рыночные!
Вы пишите на форуме MQl5. Вы пишете в основном разделе. Вы пишите в теме о MQL5 - естественно ответы получаете про MQL5.
Вопросы по старому терминалу задаются в специальном разделе: MQL4 и MetaTrader 4. Впредь пишите там. Ваши вопросы перенесу.
Вот я сравнил два варианта, в первом применил OrdersTotal()-1 и начал перебор с нуля - получил ошибку
Во втором варианте начал с единицы и взял целиком OrdersTotal(), - ошибки нет в этот раз
Смотрите скрины, там видно что OrdersTotal() отображает фактическое кол-во ордеров, а не OrdersTotal()-1 ...
Вопрос, почему OrdersTotal() выдаёт точное количество ордеров, а не -1, так и должно быть или это что то новое?
Ведь в этом случае, перебор надо начинать не с нуля, а с единицы!
Вот я сравнил два варианта, в первом применил OrdersTotal()-1 и начал перебор с нуля - получил ошибку
Во втором варианте начал с единицы и взял целиком OrdersTotal(), - ошибки нет в этот раз
Смотрите скрины, там видно что OrdersTotal() отображает фактическое кол-во ордеров, а не OrdersTotal()-1 ...
Вопрос, почему OrdersTotal() выдаёт точное количество ордеров, а не -1, так и должно быть или это что то новое?
Ведь в этом случае, перебор надо начинать не с нуля, а с единицы!
Кажется я понял свою ошибку сорри...
В этом условии идёт смещение на -1:
if (OrderSelect(i-1,SELECT_BY_POS)==true){}
Извините за тупость, взял строку из другой программы и не обратил внимание на смещение!
//+------------------------------------------------------------------+ //| MSBB.mq4 | //| Copyright 2020, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <MovingAverages.mqh> #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 clrGreen #property indicator_color2 clrRed #property indicator_width1 1 input int InpMSBBPeriod=3; // Period input ENUM_MA_METHOD InpMSBBMethod=MODE_SMA; // Method //--- indicator buffers double ExtMSBBBuffer[]; double ExtTempBuffer[]; double ExtPriceBuffer[]; double ExtSignalBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(void) { //--- indicator buffers mapping IndicatorDigits(Digits-2); //--- drawing settings IndicatorBuffers(4); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMSBBBuffer); SetIndexBuffer(1,ExtSignalBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(2,ExtTempBuffer); SetIndexBuffer(2,ExtPriceBuffer); SetIndexDrawBegin(1,InpMSBBPeriod); //--- name for DataWindow and indicator subwindow label IndicatorShortName("MSBB("+IntegerToString(InpMSBBPeriod)+")"); SetIndexLabel(0,"MSBB"); SetIndexLabel(1,"Signal"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i;//limit; //------ if(rates_total<=InpMSBBPeriod || InpMSBBPeriod<=2) return(0); /*//--- counting from 0 to rates_total ArraySetAsSeries(ExtMSBBBuffer,false); ArraySetAsSeries(ExtSignalBuffer,false); ArraySetAsSeries(open,false); ArraySetAsSeries(high,false); ArraySetAsSeries(low,false); ArraySetAsSeries(close,false);*/ //--- // limit=rates_total-prev_calculated; //if(prev_calculated>0) // limit++; //--- typical price and its moving average for(i=0; i<rates_total; i++) { ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); ExtPriceBuffer[i] = NormalizeDouble((close[i+1]-open[i+1])/Point(),2); //ExtMSBBBuffer[i]=price_open+ExtTempBuffer[i]; //Print("ExtPriceBuffer[i] = ", ExtPriceBuffer[i]); if(ExtTempBuffer[i]==0) ExtMSBBBuffer[i]=0.0; if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]>0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i] = 0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]<0) { double price_open = NormalizeDouble((open[i]-open[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-close[i+1])/Point(),2); if((price_open<0 && price_close>0)||(price_open>0 && price_close<0)) ExtMSBBBuffer[i]=0.0; if((price_open<0 && price_close<0)||(price_open>0 && price_close>0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } if(ExtPriceBuffer[i]<0 && ExtTempBuffer[i]>0) { double price_open = NormalizeDouble((open[i]-close[i+1])/Point(),2); double price_close = NormalizeDouble((close[i]-open[i+1])/Point(),2); if((price_open>0 && price_close<0)||(price_open<0 && price_close>0)) ExtMSBBBuffer[i]=0.0; if((price_open>0 && price_close>0)||(price_open<0 && price_close<0)) ExtMSBBBuffer[i]=ExtTempBuffer[i]+price_open; } //--- signal line counted in the 2-nd buffer //ExtSignalBuffer[i]=iMAOnArray(ExtMSBBBuffer,0,InpMSBBPeriod,0,InpMSBBMethod,0); SimpleMAOnBuffer(rates_total,prev_calculated,1,InpMSBBPeriod+2,ExtMSBBBuffer,ExtSignalBuffer); Print ("ExtSignalBuffer = ", ExtSignalBuffer[i]); //--- done } /* if(ExtPriceBuffer[i]>0||ExtPriceBuffer[i]<0) { ExtMSBBBuffer[i] = ExtPriceBuffer[i]+ExtTempBuffer[i]; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } if(ExtPriceBuffer[i]==0) { ExtMSBBBuffer[i] = 0.0; Print("ExtMSBBBuffer[i] = ", ExtMSBBBuffer[i]); } }*/ //--- //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+