Jump to content
Programmer

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

Recommended Posts

serg-box
To serg:

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

Share this post


Link to post
Share on other sites
Yudjin78

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

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

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

Timetrend2.mq4

Share this post


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

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

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

 

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

Share this post


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) // Если есть следующий

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

Share this post


Link to post
Share on other sites
Yudjin78

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

Share this post


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() указатель уходит на последний ордер и цикл теряет смысл.

Share this post


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

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

Share this post


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

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

 

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

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

 

спасибо!


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

Share this post


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

 

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

Share this post


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

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

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

dHigh = High[pos];

dLow = Low[pos];

dResult = dHigh / dLow;

//dResult = dHigh - dLow;

ExtMapBuffer1[pos]= dResult ;

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

 

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


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

Share this post


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

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

 

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

 

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


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

Share this post


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

 

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

 

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

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

Share this post


Link to post
Share on other sites
Programmer

To Yudjin78:

 

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

 

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

Share this post


Link to post
Share on other sites
Raffael_X

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

Share this post


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 раздел т.к. код для момента закрытия именно по ТП и СЛ без тралов или критериев закрытия не нашел.

Share this post


Link to post
Share on other sites
Yudjin78

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

Share this post


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

 

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

Share this post


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

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

Share this post


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

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

Share this post


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

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

 

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

 

 

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

 

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

 

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

 

спасибо .


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

Share this post


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

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

Share this post


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

 

ок)

спасибо!


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

Share this post


Link to post
Share on other sites
Samyel

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×