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

 
Artyom Trishkin:

Быстрее разобраться и понять 

запишу цены, как их потом брать, когда какую?

void PriceTimePos(string sy="",int op=-1,int mn=-1)
  {
  double Цены[3];
   datetime t;
   bool daa;
   int d,k_=OrdersTotal(),typ_;
   double   r=0;
   int      i,k=OrdersHistoryTotal();

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(OrderCloseTime()>=TimeCurrent()-2440*60)
                       {
                        t=OrderCloseTime();
                        r=OrderOpenPrice();
                        sl=OrderStopLoss();
                        tp=OrderTakeProfit();
                        lot=OrderLots();
                        typ_=OrderType();
                        Print("OpenPrice",r);
                       Цены[0]=OrderOpenPrice();
                    
                       }
                    }
                 }
              }
           }
        }
     }
//
  }
чтобы в этот цикл вставлять вместо r 
                        daa=false;
                        for(i=0; i<k; i++)
                          {
                           if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                             {
                              if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
                                {
                                 if(OrderType()>1 && OrderType()<6)
                                   {
                                    d=MarketInfo(OrderSymbol(), MODE_DIGITS);
                                    r=NormalizeDouble(r, d);
                                    if(r==NormalizeDouble(OrderOpenPrice(),d)) daa=true; 
                                   }
                                }
                             }
                          }
 

Добрый день! Сделал функцию которая должна увеличивать стоп лосс после того к прошлый ордер закрылся в минус.

Увеличивает на установленный шаг, до достижения максимума. В итоге всегда ставит первоначально значение стоп лосса.

Что не так? Спасибо! 

//+------------------------------------------------------------------+

   double SL()

     {

      double sL;

      if(OrdersHistoryTotal()==0)

        {

         sL=StopLoss;

        }

      if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))

        {

         if(OrderProfit()>=0)

           {

            sL=StopLoss;

           }

         if(OrderProfit()<0 && OrderType()==OP_BUY)

           {

            sL=OrderOpenPrice()-OrderStopLoss()+SLStep;

            }

           if(OrderProfit()<0 && OrderType()==OP_SELL)

           {

            sL=OrderStopLoss()-OrderOpenPrice()+SLStep;

            }

        }

      if(sL>maxStep)

            {

            sL=StopLoss;

                        }

            

      return(sL);

     }

//+------------------------------------------------------------------+

 
Artyom Trishkin:
  1. Правильно возвращаете значения из не void-функций, но всё же лучше переходить на новые рельсы - там ничего сложного.
  2. Пишите, не забывайте вставлять директиву #property strict в самом начале кода - где прописаны все директивы, читайте коды ошибок - их описания есть в документации, и всё будет нормально и не сложно.
А где находить коды ошибок? где эта документация?
 
#property strict

int Count=0;

void OnInit()     
{
   Alert ("Сработала ф-ия init() при запуске");   // Сообщение
   return;                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
void OnStart()                                                                       // Спец. ф-ия start()
   {
   double Price = Bid;                                                      // Локальная перемен.
   Count++;                                                                      // Счётчик тиков
   Alert("Новый тик ",Count," Цена = ",Price);       // Сообщение
   return;                                                                        // Выход из start()
   }
void OnDeinit()                                                                              // Спец. ф-ия deinit()
   {
   Alert ("Сработала ф-ия deinit() при выгрузке");         // Сообщение
   return;                                                                                 // Выход из deinit()
   }

Что я пишу не так ?

Должно получиться такое http://prntscr.com/lu1kb9


Попробовал под текущий шаблон вставить данные 

//+------------------------------------------------------------------+
//|                                                            п.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   Alert ("Сработала ф-ия init() при запуске");   // Сообщение
                                                                       // Выход из init()
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
Alert ("Сработала ф-ия deinit() при выгрузке");         // Сообщение
   return;
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 
   double Price = PRICE_OPEN;                                                      // Локальная перемен.
   Count++;                                                                      // Счётчик тиков
   Alert("Новый тик ",Count," Цена = ",Price);       // Сообщение
   return;                                                                        // Выход из start()
   
   
  }
//+------------------------------------------------------------------+


Но все равно не то. помогите
Скриншот
Скриншот
  • prnt.sc
Снято с помощью Lightshot
 
Прошу помощи, может у кого есть функция, в которую можно передать массив для расчета максимальной просадки?
 

Добрый день.

Осваиваю эм-кью-эль по учебнику Сергея Ковалева.

Взял от туда советник, скомпилировал, он даже вроде работает, но при компиляции выдает какие-то замечания, не ошибки, а именно предупреждения.

Что надо изменить чтобы компилировалось без замечаний? Заранее спасибо.

Файлы:
expert.mq4  28 kb
 
Sergey Branin:
А где находить коды ошибок? где эта документация?

В меню данного сайта - вверх гляньте

 
Artyom Trishkin:

В меню данного сайта - вверх гляньте

Артём, там документация по mql5, а вопросы в разделе mql4

Sergey Branin:
А где находить коды ошибок? где эта документация?

Тут документация по mql4. А лучше нажать F1 находясь в MetaEditor`e

Справочник MQL4
Справочник MQL4
  • docs.mql4.com
MetaQuotes Language 4 (MQL4) - встроенный язык программирования торговых стратегий, разработанный компанией MetaQuotes Software Corp. на основе своего многолетнего опыта в создании торгово-информационных платформ. Этот язык позволяет писать собственные программы-эксперты (Expert Advisors), автоматизирующие управление торговыми процессами и...
 
Alexey Viktorov:

Артём, там документация по mql5? а вопросы в разделе mql4

Тут документация по mql4. А лучше нажать F1 находясь в MetaEditor`e

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

 
Здравствуйте,я в программировании новичок. Нигде не нашёл готового кода. Идея такая - нужно из советника управлять пользовательским индикатором, точнее менять его экстерн параметры (один) при наступлении какого-то события. Логика вкратце - если лот (или например число позиций) > заданного значения, в индикаторе ( находящемся в другом окне и никак не связанного с данным советником), изменяется внешняя настройка на "лету" без переинициализации индюка. Может можно попробовать через
 string ServiceCustomIndicatorByIndexA(int nIndex);// я даже не знаю тут   ANSI или UNICODE нужно
и
int ServiceGetNamesIndicatorsMA(int hwndChart,int nWindow,string &asIndicators[],int nSize);   
а как это реализовать не знаю, может кто из программистов простенький блок кода напишет для примера. с/у Денис



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