Jump to content

Общие вопросы по языку MQL


Recommended Posts

serg-box
To serg:

Спасибо, понял.

Link to post
Share on other sites
  • Replies 7.6k
  • Created
  • Last Reply

Top Posters In This Topic

  • AntFX

    577

  • sergey1294

    569

  • Ugar68

    517

  • Programmer

    419

Top Posters In This Topic

Popular Posts

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

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

Основной советник выставляет "сигнальный" отложенный ордер далеко от текущей цены и каждую например, минуту модифицирует у него время экспирации: это может быть текущее время плюс 1 час, или плюс 1 су

Posted Images

Yudjin78

Кирилл или SHU помогите.

Написал экспа по аналогу из учебника Ковалева, работает по принципу открытие по времени и текущему состоянию рынка, но сделок не совершает, сцука.Для определения тренда использую FX_FISH, но можно использоать любой трендовый.

Подскажите где может быть ошибка.

Timetrend2.mq4

Link to post
Share on other sites
lukas1
Кирилл или SHU помогите.

Написал экспа по аналогу из учебника Ковалева, работает по принципу открытие по времени и текущему состоянию рынка, но сделок не совершает, сцука.Для определения тренда использую FX_FISH, но можно использоать любой трендовый.

Подскажите где может быть ошибка.

 

Безо всякого условия к Total плюсуешь единицу. Потом пишешь, что если Total>0, то - выход. Вот поэтому и не работает.

Link to post
Share on other sites
Yudjin78
Безо всякого условия к Total плюсуешь единицу. Потом пишешь, что если Total>0, то - выход. Вот поэтому и не работает.

 

Благодарю за ответ на просьбу просмотреть советника.

Привожу цитату из учебника Ковалева:

Учёт ордеров

Рассматриваемый эксперт предполагает возможность работы только с одним рыночным ордером. Задачей блока учёта ордеров (блок 4-5) является определение характеристик открытого ордера, если такой ордер есть. В цикле перебора ордеров for опрашиваются все имеющиеся рыночные и отложенные ордера, а именно от первого (int i=1) до последнего (i<=OrdersTotal()). На каждой итерации этого цикла с помощью функции OrderSelect() выбирается очередной ордер. Выбор производится из источника открытых и отложенных ордеров (SELECT_BY_POS).

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий

Если этот выбор удалось выполнить успешно (т.е. если в терминале есть очередной ордер), то в дальнейшем и этот ордер и сложившуюся ситуацию необходимо исследовать: открыт ли выбранный ордер по финансовому инструменту, по которому работает эксперт, является ли ордер рыночным или отложенным, а также учесть его при подсчёте ордеров. В строке:

if (OrderSymbol()!=Symb)continue; // Не наш фин. инструм

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

Если функция OrderType() возвращает значение больше 1 (см. Типы торговых операций), то выбранный ордер - отложенный. Но в данном эксперте не предусмотрено управление отложенными ордерами. Это значит, что необходимо закончить исполнение специальной функции start(), т.к. сложилась конфликтная ситуация. В этом случае после сообщения об окончании работы исполнение функции start() заканчивается с помощью оператора return.

Если последняя проверка показала, что исследуемый ордер рыночный, то производится подсчёт и анализ общего количества ордеров, открытых по финансовому инструменту. Для первого из таких ордеров определяются все необходимые характеристики. Если же на очередной итерации счётчик ордеров (переменная Total ) зафиксирует второй рыночный ордер, то такая ситуация также расценивается как конфликтная, т.к. эксперт не предназначен для управления более, чем одним рыночным ордером. В этом случае исполнение специальной функции start() после уведомления пользователя заканчивается.

В результате исполнения блока учёта ордеров (если все проверки прошли успешно) переменная Total сохраняет своё значение нулевым, если рыночных ордеров нет, или получает значение 1, если по нашему финансовому инструменту имеется рыночный ордер. В последнем случае ряд переменных, поставленных в соответствие характеристикам ордера (номер, тип, цена открытия, значения стоп-приказов и стоимость ордера), тоже получают свои значения.

Насколько я понял условие все же есть:

if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий

Если можно обьясните.

Link to post
Share on other sites
Yudjin78

Программеры или думают, или игнорируют вопрос.

Link to post
Share on other sites
Dmtr

Ребята, есть в MQL один неприятный баг. Появляется, если есть цикл в цикле.

 

Например (пишу на память дабы отразить смысл, код не отражает действительности)

 

void PrintOrders()

{

int pos;

int total = OrdersTotal();

 

for(pos=0;pos<total;pos++)

{

if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;

 

if(!IsPositiveOrder()) continue;

 

Print(OrderComment());

 

}

}

 

bool IsPositiveOrder()

{

int pos;

int total = OrdersTotal();

 

for(pos=0;pos<total;pos++)

{

if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;

 

if(OrderProfit() > 0) return(true);

 

}

 

return(false);

}

 

Так вот, в этом куске, в функции PrintOrders(),

после вызова IsPositiveOrders() указатель уходит на последний ордер и цикл теряет смысл.

Link to post
Share on other sites
~~SOM~~
а что должна вообще делать функция IsPositiveOrder() ?

Ну видимо, определять прибыльную сделку.

Link to post
Share on other sites
ЖАБА77

вопрос не в тему .. звиняйте!

 

там игры в инете есть - пишут - пришла смс на номер ...

вопрос - сколько денеК берут за игру одну на mail/ru/??

 

спасибо!


Покупаю лоссы -Дарю профиты) Ква!

Link to post
Share on other sites
Roger
Ребята, есть в MQL один неприятный баг. Появляется, если есть цикл в цикле.

 

Все просто, у Вас переменные цикла с одним именем. Поставьте в одном pos в другом - pos1 и все устаканится.:flower2:

Link to post
Share on other sites
Оптимист
Здравствуйте!

Начал изучать "Уроки" и сразу возникли вопросы

Если в коде индикатора

dHigh = High[pos];

dLow = Low[pos];

dResult = dHigh / dLow;

//dResult = dHigh - dLow;

ExtMapBuffer1[pos]= dResult ;

ставить знак деления, то компилируется нормально, но отрисовывает только три последних бара. Что бы это значило?

 

Рискну повторить свой вопрос. А вдруг кто-нибудь ответит?:ahelp:


Век живи - век учись...

Link to post
Share on other sites
ЖАБА77

и что? спасибо за не ответ(

 

так вот , за игру примерно 150 рЭ ..

 

с моего телефона свистнули1000 рЭ)))


Покупаю лоссы -Дарю профиты) Ква!

Link to post
Share on other sites
alex1978
и что? спасибо за не ответ(

 

так вот , за игру примерно 150 рЭ ..

 

с моего телефона свистнули1000 рЭ)))

Так не нужно держать на телефоне больше 150 рэ:)

Link to post
Share on other sites
Programmer

To Yudjin78:

 

Программеры или думают, или игнорируют вопрос.

 

У Вас код 250 строк. Сходу ошибку не видно. Никто не будет сидеть и разбираться с Вашим кодом. Попробуйте сами или начните изучение программирования с программ полегче.

Link to post
Share on other sites
Raffael_X

Привет всем! Кто-нибудь может сделать чтоб бар окрашивался в цвет которому равен по MFI Билла?

Link to post
Share on other sites
Yudjin78
To Yudjin78:

 

 

 

У Вас код 250 строк. Сходу ошибку не видно. Никто не будет сидеть и разбираться с Вашим кодом. Попробуйте сами или начните изучение программирования с программ полегче.

Спасибо, что взглянули. Вобще весь код я думаю можно не смотреть, посмотрите если можно части 4, 5, 6

//--------------------------------------------------------------- 4 --
  // Учёт ордеров
  Symb=Symbol();                               // Название фин.инстр.
  Total=0;                                     // Количество ордеров
  for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
    {
     if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
       {                                       // Анализ ордеров:
        if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
        if (OrderType()>1)                     // Попался отложенный
          {
           Alert("Обнаружен отложенный ордер. Эксперт не работает.");
           return;                             // Выход из start()
          }
        Total++;                               // Счётчик рыночн. орд
        if (Total>1)                           // Не более одного орд
          {
           Alert("Несколько рыночных ордеров. Эксперт не работает.");
           return;                             // Выход из start()
          }
        Ticket=OrderTicket();                  // Номер выбранн. орд.
        Price =OrderOpenPrice();               // Цена выбранн. орд.
        SL    =OrderStopLoss();                // SL выбранного орд.
        TP    =OrderTakeProfit();              // TP выбранного орд.
        Lot   =OrderLots();                    // Количество лотов
       }
    }
//--------------------------------------------------------------- 5 --

  // Торговые критерии для моей системы
   double TrendFish=iCustom(NULL,0,"FX_FISH",period,price,Mode_Fast,Signals,0,1);     
       //----+ ОПРЕДЕЛЕНИЕ СИГНАЛОВ ДЛЯ СДЕЛОК BUY 
    if (Hour() == TradeHour)                                                      //Если час торговли равен текущему
       if (Minute() == TradeMinute)                                               //Если минута торговли равна текущей
         if (TrendFish >= PorogUp)                                                //Если значения индикатора > или = порогу для BUY                                              
   {
     Opn_B=true;                                                                  // Критерий откр. Buy
   }
        //----+ ОПРЕДЕЛЕНИЕ СИГНАЛОВ ДЛЯ СДЕЛОК SELL
    if (Hour() == TradeHour)                                                      //Если час торговли равен текущему
       if (Minute() == TradeMinute)                                               //Если минута торговли равна текущей
         if (TrendFish <= PorogDown)                                                //Если значения индикатора < или = порогу для SELL                                                 
   {
      Opn_S=true;                                                                  // Критерий откр. Sell
   }    
  // Торговые критерии--------------------------------------------------------------- 6 --
  // Закрытие ордеров
  while(true)                                  // Цикл закрытия орд.
    {
        if (Fun_Error(GetLastError())==1)      // Обработка ошибок
           continue;                           // Повторная попытка
        return;                                // Выход из start()
     break;                                    // Выход из while
    }

4 часть , чтобы подтвердить или опровергнуть мысль Lukas1, что ошибка там.А части 5 и 6 это уже я писал, поэтому считаю, что ошибка там. Особенно посмотрите 6 раздел т.к. код для момента закрытия именно по ТП и СЛ без тралов или критериев закрытия не нашел.

Link to post
Share on other sites
Yudjin78

И еще вопрос скажите, если мне нужно только протестировать стратегию на тестере, какие части в советнике не нужны? И еще по торговле одним лотом, я думаю если этот блок убрать, т.к сделки совершаются раз в сутки, то накладок не будет.

Link to post
Share on other sites
Dmtr
Все просто, у Вас переменные цикла с одним именем. Поставьте в одном pos в другом - pos1 и все устаканится.:flower2:

 

Roger, огромное спасибо!!! Мне бы и в голову не пришло что в разных функциях одна и та же локальная переменная - глобальна. Буду пробовать ))

Link to post
Share on other sites
Shu
Ну видимо, определять прибыльную сделку.

если прибыльную сделку - совершенно непонятно зачем это делать через вызов функции своей отдельной.. наверное, там что-то более мудрёное.

Link to post
Share on other sites
~~SOM~~
если прибыльную сделку - совершенно непонятно зачем это делать через вызов функции своей отдельной.. наверное, там что-то более мудрёное.

Он там вначале написал, что это типа просто пример, показать что не работает, и все.

Link to post
Share on other sites
ЖАБА77

мой счет на 10 000 $ откр по 0.1

 

хочу открыть микро рубли в альпари... открыт поз по 0.01

 

 

вопрос - что бы повторить депозит 10 000$ только на микро сколько рублей надо

 

у меня получается 1 000 $ что примерно 30 000 руб

 

прально? или не прально?

 

спасибо .


Покупаю лоссы -Дарю профиты) Ква!

Link to post
Share on other sites
~~SOM~~

Правильно, $1000 по курсу Альпари.

Link to post
Share on other sites
ЖАБА77
Правильно, $1000 по курсу Альпари.

 

ок)

спасибо!


Покупаю лоссы -Дарю профиты) Ква!

Link to post
Share on other sites
Samyel

Скажите пожалуйста,как можно заставить сотрудничатьMQL одного терминала с MQL другого терминала(разные сервера и счета) в режиме on-line,или чтo бы MQL одного терминала могла видеть котировки другого терминала в онлайне?:roll:

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...