Автор Тема: Обучение языку MQL4 под MetaTrader 4  (Прочитано 382990 раз)

Оффлайн scherbakovss

  • Интересующийся
  • **
  • Сообщений: 63
  • Вес голоса: 0
  • scherbakovss Новенький
  • Финансовая свобода - это когда Вы создали что то,
    • Просмотр профиля
    • Награды
  • Опыт торговли: 1-3 года
  • Рейтинг: 10
Обучение языку MQL4 под MetaTrader 4
« Ответ #3315 : Январь 11, 2017, 02:05:54 am »
  • 0
Ну, что не так то? Все правильно же работает,верно?
Не работает,убрал проверку на валютную пару,добавил отложенные ордера
http://joxi.ru/Grq9kplhMGqqrz

void OnTick()
  {
  //--- Открываем файл
   int h=FileOpen("log.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
   
            if(OrderType()==OP_BUY)
              {
               type=0;
               lot=OrderLots();
               sl=OrderStopLoss();
               tp=OrderTakeProfit();
              }
                                           
         if(OrderType()==OP_SELL)
         {
             type=1;
              lot=OrderLots();
               sl=OrderStopLoss();
             tp=OrderTakeProfit();
            }
             if(OrderType()==OP_BUYLIMIT)
          {
            type=2;
              lot=OrderLots();
           sl=OrderStopLoss();
             tp=OrderTakeProfit();
            }
            if(OrderType()==OP_SELLLIMIT)
              {
            type=3;
             lot=OrderLots();
             sl=OrderStopLoss();
            tp=OrderTakeProfit();
             }
            if(OrderType()==OP_BUYSTOP)
              {
                type=4;
               lot=OrderLots();
               sl=OrderStopLoss();
               tp=OrderTakeProfit();
               }
              if(OrderType()==OP_SELLSTOP)
               {
                type=5;
                lot=OrderLots();
                sl=OrderStopLoss();
                tp=OrderTakeProfit();
              }
               sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=Symbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
               RefreshRates();                             
       
         
        }//OrderSelect
        FileClose(h);
     }//

Trade Like A Pro

Обучение языку MQL4 под MetaTrader 4
« Ответ #3315 : Январь 11, 2017, 02:05:54 am »


Онлайн Alexandrkas

  • Интересующийся
  • **
  • Сообщений: 60
  • Вес голоса: 0
  • Alexandrkas Новенький
    • Просмотр профиля
    • Награды
  • Опыт торговли: 1-3 года
  • Рейтинг: 105
Обучение языку MQL4 под MetaTrader 4
« Ответ #3316 : Январь 11, 2017, 06:00:04 am »
  • 0
Подскажите по 6 уроку, написание скриптов. С первым заданием из ДЗ не могу разобраться. Нужно написать скрипт, который будет выставлять защитные стоп ордера к уже имеющимся. Вроде по логике все правильно в коде, но почему то на графике ни чего не происходит. Файл скрипта прилагаю.

Оффлайн xbms

  • Финансовый махинатор
  • *****
  • Сообщений: 645
  • Вес голоса: 2534102
  • xbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форумаxbms Ключевая фигура форума
  • Награды Программист MQL
    • Просмотр профиля
    • Награды
  • Опыт торговли: > 5 лет
  • Рейтинг: 489
Обучение языку MQL4 под MetaTrader 4
« Ответ #3317 : Январь 11, 2017, 11:31:50 am »
  • 1
Подскажите по 6 уроку, написание скриптов. С первым заданием из ДЗ не могу разобраться. Нужно написать скрипт, который будет выставлять защитные стоп ордера к уже имеющимся. Вроде по логике все правильно в коде, но почему то на графике ни чего не происходит. Файл скрипта прилагаю.

Приветствую!

1-я ошибка тут:
for(int i=OrdersTotal()-1; i<=0; i--) // запускаем цикл перебора всех ордеров

Правильно будет:
for(int i=OrdersTotal()-1; i>=0; i--)



Сообщение понравилось: Alexandrkas

Онлайн Alexandrkas

  • Интересующийся
  • **
  • Сообщений: 60
  • Вес голоса: 0
  • Alexandrkas Новенький
    • Просмотр профиля
    • Награды
  • Опыт торговли: 1-3 года
  • Рейтинг: 105
Обучение языку MQL4 под MetaTrader 4
« Ответ #3318 : Январь 11, 2017, 01:08:43 pm »
  • 0
1-я ошибка тут:
Код: [Выделить]
for(int i=OrdersTotal()-1; i<=0; i--) // запускаем цикл перебора всех ордеров

Правильно будет:
for(int i=OrdersTotal()-1; i>=0; i--)

Спасибо. Теперь все работает. Я почему-то рассуждал, что цикл будет продолжаться пока i не станет меньше либо равно нулю.

Оффлайн Silentspec

  • Финансовый махинатор
  • *****
  • Сообщений: 1082
  • Вес голоса: 18471549
  • Silentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форумаSilentspec Ключевая фигура форума
  • Награды овер 1к сообщений на форуме Публикация статей и переводов на форуме Слежу за порядком на форуме Управляющий ПАММ-счетом Программист MQL Торговля советниками
    • Просмотр профиля
    • Награды
  • Опыт торговли: > 5 лет
  • Рейтинг: 5540
Обучение языку MQL4 под MetaTrader 4
« Ответ #3319 : Январь 11, 2017, 01:35:29 pm »
  • 0
Странно, вроде все нормально работать должно :d
« Последнее редактирование: Январь 11, 2017, 01:41:41 pm от Silentspec »

Оффлайн scherbakovss

  • Интересующийся
  • **
  • Сообщений: 63
  • Вес голоса: 0
  • scherbakovss Новенький
  • Финансовая свобода - это когда Вы создали что то,
    • Просмотр профиля
    • Награды
  • Опыт торговли: 1-3 года
  • Рейтинг: 10
Обучение языку MQL4 под MetaTrader 4
« Ответ #3320 : Январь 11, 2017, 03:09:07 pm »
  • 0
Приветствую!
Подскажите,чего все ордера у файл не пишутся
 http://joxi.ru/V2VgoO6TnB4bAv
Пробовал код с
   sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
вынести за Ордертайп,та же фигня.

void OnTick()
  {
  //--- Открываем файл
   int h=FileOpen("log.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
   
            if(OrderType()==OP_BUY)
              {
               type=0;
               lot=OrderLots();
               sl=OrderStopLoss();
               tp=OrderTakeProfit();
               
                sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
              }
                                           
         if(OrderType()==OP_SELL)
         {
             type=1;
              lot=OrderLots();
               sl=OrderStopLoss();
             tp=OrderTakeProfit();
             
              sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
            }
             if(OrderType()==OP_BUYLIMIT)
          {
            type=2;
              lot=OrderLots();
           sl=OrderStopLoss();
             tp=OrderTakeProfit();
             
              sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
            }
            if(OrderType()==OP_SELLLIMIT)
              {
            type=3;
             lot=OrderLots();
             sl=OrderStopLoss();
            tp=OrderTakeProfit();
           
             sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
             }
            if(OrderType()==OP_BUYSTOP)
              {
                type=4;
               lot=OrderLots();
               sl=OrderStopLoss();
               tp=OrderTakeProfit();
               
                sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
               }
              if(OrderType()==OP_SELLSTOP)
               {
                type=5;
                lot=OrderLots();
                sl=OrderStopLoss();
                tp=OrderTakeProfit();
               
                 sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
              }
             
               RefreshRates();                             
       
         
        }//OrderSelect
        FileClose(h);
     }//

Оффлайн Partorius

  • Новичок
  • *
  • Сообщений: 12
  • Вес голоса: 0
  • Partorius Новенький
    • Просмотр профиля
    • Награды
  • Опыт торговли: 1-3 года
  • Рейтинг: 2
Обучение языку MQL4 под MetaTrader 4
« Ответ #3321 : Январь 12, 2017, 01:52:21 pm »
  • 0
Разбираюсь с советником, при компиляции пишет ошибку 'AutoTimeSettings should be (fal…' - parameter passed as reference, variable expected делает ссылку на эту строку

if (AutoTimeSettings) {
MessageBoxA(0, "AutoTimeSettings should be (false) at the test mode. Using ManualGMT_Offset", "Error", 0);

в чем может быть дело?

Оффлайн afert

  • Новичок
  • *
  • Сообщений: 14
  • Вес голоса: 0
  • afert Новенький
    • Просмотр профиля
    • Награды
  • Опыт торговли: < 1 года
  • Рейтинг: 1
Обучение языку MQL4 под MetaTrader 4
« Ответ #3322 : Январь 12, 2017, 02:32:44 pm »
  • 0
Уважаемые программисты! Возможно глупый вопрос, но не могу сообразить.  Собираю советник по индикатору  и двум таймфреймам Н1 и М15, на Н1 есть сигнал и пока он держится на М15 может быть несколько потенциальных входов. Подскажите как прописать условие чтобы брался только первый или один?

Оффлайн scherbakovss

  • Интересующийся
  • **
  • Сообщений: 63
  • Вес голоса: 0
  • scherbakovss Новенький
  • Финансовая свобода - это когда Вы создали что то,
    • Просмотр профиля
    • Награды
  • Опыт торговли: 1-3 года
  • Рейтинг: 10
Обучение языку MQL4 под MetaTrader 4
« Ответ #3323 : Январь 12, 2017, 04:14:41 pm »
  • 0
Подскажите на примере как правильно все открытые сделки в мт4 записать у файл и прочитать их,бо реально,что не делал пишет только последний ордер и все.А если ордер закрылся то запись о нем не стираеться из файла.

//Запись
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  //--- Открываем файл
   int h=FileOpen("log.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
   
            if(OrderType()==OP_BUY)
              {
               type=0;
               lot=OrderLots();
               sl=OrderStopLoss();
               tp=OrderTakeProfit();
               
                sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
              }
                                           
         if(OrderType()==OP_SELL)
         {
             type=1;
              lot=OrderLots();
               sl=OrderStopLoss();
             tp=OrderTakeProfit();
             
              sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
            }
             if(OrderType()==OP_BUYLIMIT)
          {
            type=2;
              lot=OrderLots();
           sl=OrderStopLoss();
             tp=OrderTakeProfit();
             
              sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
            }
            if(OrderType()==OP_SELLLIMIT)
              {
            type=3;
             lot=OrderLots();
             sl=OrderStopLoss();
            tp=OrderTakeProfit();
           
             sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
             }
            if(OrderType()==OP_BUYSTOP)
              {
                type=4;
               lot=OrderLots();
               sl=OrderStopLoss();
               tp=OrderTakeProfit();
               
                sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
               }
              if(OrderType()==OP_SELLSTOP)
               {
                type=5;
                lot=OrderLots();
                sl=OrderStopLoss();
                tp=OrderTakeProfit();
               
                 sl=NormalizeDouble(sl,Digits);
               tp=NormalizeDouble(tp,Digits);
               s=OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp;
                FileWrite(h,s);
              }
             
               RefreshRates();                             
       
         
        }//OrderSelect
        FileClose(h);
     }//

Оффлайн vitek01

  • Постоялец
  • ***
  • Сообщений: 102
  • Вес голоса: 134277
  • vitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форума
  • Награды Торгую без лишнего на графике
    • Просмотр профиля
    • Награды
  • Опыт торговли: Нет
  • Рейтинг: 47
Обучение языку MQL4 под MetaTrader 4
« Ответ #3324 : Январь 13, 2017, 11:10:51 am »
  • 0
Подскажите на примере как правильно все открытые сделки в мт4 записать у файл и прочитать их,бо реально,что не делал пишет только последний ордер и все.А если ордер закрылся то запись о нем не стираеться из файла.



навскидку думаю что ты просто перезаписываешь переменные и остается один последний ордер.

Оффлайн scherbakovss

  • Интересующийся
  • **
  • Сообщений: 63
  • Вес голоса: 0
  • scherbakovss Новенький
  • Финансовая свобода - это когда Вы создали что то,
    • Просмотр профиля
    • Награды
  • Опыт торговли: 1-3 года
  • Рейтинг: 10
Обучение языку MQL4 под MetaTrader 4
« Ответ #3325 : Январь 13, 2017, 11:18:22 am »
  • 0
навскидку думаю что ты просто перезаписываешь переменные и остается один последний ордер.
А как правильно?

Оффлайн vitek01

  • Постоялец
  • ***
  • Сообщений: 102
  • Вес голоса: 134277
  • vitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форумаvitek01 Ключевая фигура форума
  • Награды Торгую без лишнего на графике
    • Просмотр профиля
    • Награды
  • Опыт торговли: Нет
  • Рейтинг: 47
Обучение языку MQL4 под MetaTrader 4
« Ответ #3326 : Январь 13, 2017, 12:05:56 pm »
  • 0
навскидку думаю что ты просто перезаписываешь переменные и остается один последний ордер.
А как правильно?

Может просто каждый ордер отдельно записывать в отдельный файл, я же не знаю для чего и каквы  используете эти данные. Толковые ребята найдутся которые распишут как нужно.

Оффлайн Viktor M.

  • Новичок
  • *
  • Сообщений: 2
  • Вес голоса: 0
  • Viktor M. Новенький
    • Просмотр профиля
    • Награды
  • Опыт торговли: Нет
  • Рейтинг: 1
Обучение языку MQL4 под MetaTrader 4
« Ответ #3327 : Январь 13, 2017, 03:34:48 pm »
  • 0
Здравствуйте, уважаемый Сергей Ака! В MQL eсть функция GetTickCount, которая возвращает число msec, прошедших с момента запуска системы. Скажите пожалуйста, возможно-ли с помощью этой функции определить время между тиками т.е. GetTickCount_2 - GetTickCount_1 = t(msec), и, как это правильно прописать в коде MQL. И ещё, пожалуйста, как в условном операторе прописать направление движения цены (вверх или вниз). Спасибо!

Оффлайн scherbakovss

  • Интересующийся
  • **
  • Сообщений: 63
  • Вес голоса: 0
  • scherbakovss Новенький
  • Финансовая свобода - это когда Вы создали что то,
    • Просмотр профиля
    • Награды
  • Опыт торговли: 1-3 года
  • Рейтинг: 10
Обучение языку MQL4 под MetaTrader 4
« Ответ #3328 : Январь 13, 2017, 03:37:04 pm »
  • 0
Жаль,что в моем вопросе отсутствую специалисты способные помочь по записи и чтению всех типов ордеров в файл с обновлением если ордер закрылся.

Оффлайн SilverKZ

  • Постоялец
  • ***
  • Сообщений: 100
  • Вес голоса: 617218
  • SilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форумаSilverKZ Ключевая фигура форума
    • Просмотр профиля
    • Награды
  • Опыт торговли: < 1 года
  • Рейтинг: 122
Обучение языку MQL4 под MetaTrader 4
« Ответ #3329 : Январь 13, 2017, 04:13:04 pm »
  • 0
FileWrite(h,s);
FileWriteString(h, s + "\r\n") вам в помощь.

Но лучше так
s += OrderSymbol()+" "+(string)type+" "+(string)lot+" "+(string)sl+" "+(string)tp + "\r\n";
FileWrite(h,s);
...
}//OrderSelect
FileWrite(h,s);
FileClose(h);
« Последнее редактирование: Январь 13, 2017, 04:37:03 pm от SilverKZ »

 

Форекс блог

Стратегии Индикаторы Советники Аналитика

Мы в соцсетях

Группа Вконтакте Facebook Twitter Instagram

Ссылки

Рекомендуемый брокер Инвестиции Форекс Вики Бинарные Опционы
forex4you-C instaforex C exness D ????_????? Tickmill_small AMarkets FortFS200 grand_small