[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 163

 
polsvv, для этого используют magic. каждому советнику свой magic
 
vnn:

Всем здрассте...

Будьте добры, подскажите как собрать путь к файлам истории MetaTrader 4? Такой, как например "c:\program files\metatrader 4\history\alpari-classic\"

https://docs.mql4.com/ru/files/FileOpenHistory
 

Спасибо большое, sergeev, я кажысь, надыбал...

Print("Terminal path: ", TerminalPath() + "\\history\\" + AccountServer() + "\\");

эта строка выводит правильный путь несмотря на то что редактор в цветах ошибается... Нужно в блокноте наверное записывать код. Шутка.

 

Всем добрый вечер!

В учебнике Сергея Ковалева нашел эксперта - трейлинг стоп. Скопировал его в MetaEditor, скомпилировал, но программа не работает. Пожалуйста, подскажите в чем причина. Может я что-то не так делаю.

 

а он точно на mql написан?)

выкладывай код то

 
Парни ну обьясните тупому как пользоваться iCustom
я пишу
double BBUP =iCustom(NULL, 0, "Bands","BandsPeriod","BandsShift","BandsDeviations",1,0);
double BBDW =iCustom(NULL, 0, "Bands","BandsPeriod","BandsShift","BandsDeviations",2,0);
и всёравно не получается ...
У меня задача получить сигналы от индикатора Bands верхней и нижней линии...... Именно Bands.....
 
//--------------------------------------------------------------------
// modifystoploss.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int Tral_Stop=10;                        // Дист. преследования
//--------------------------------------------------------------- 1 --
int start()                                     // Спец. функция start
  {
   string Symb=Symbol();                        // Финанс. инструмент
//--------------------------------------------------------------- 2 --
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         int Tip=OrderType();                   // Тип ордера
         if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
         double SL=OrderStopLoss();             // SL выбранного орд.
         //------------------------------------------------------ 3 --
         while(true)                            // Цикл модификации
           {
            double TS=Tral_Stop;                // Исходное значение
            int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
            if (TS<Min_Dist)                    // Если меньше допуст.
               TS=Min_Dist;                     // Новое значение TS
            //--------------------------------------------------- 4 --
            bool Modify=false;                  // Не назначен к модифи
            switch(Tip)                         // По типу ордера
              {
               case 0 :                         // Ордер Buy
                  if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
                     NormalizeDouble(Bid-TS*Point,Digits))
                    {
                     SL=Bid-TS*Point;           // то модифицируем его
                     string Text="Buy ";        // Текст для Buy 
                     Modify=true;               // Назначен к модифи.
                    }
                  break;                        // Выход из switch
               case 1 :                         // Ордер Sell
                  if (NormalizeDouble(SL,Digits)> // Если выше желаем.
                     NormalizeDouble(Ask+TS*Point,Digits)
                     || NormalizeDouble(SL,Digits)==0)//или равно нулю
                    {
                     SL=Ask+TS*Point;           // то модифицируем его
                     Text="Sell ";              // Текст для Sell 
                     Modify=true;               // Назначен к модифи.
                    }
              }                                 // Конец switch
            if (Modify==false)                  // Если его не модифи
               break;                           // Выход из while
            //--------------------------------------------------- 5 --
            double TP    =OrderTakeProfit();    // TP выбранного орд.
            double Price =OrderOpenPrice();     // Цена выбранн. орд.
            int    Ticket=OrderTicket();        // Номер выбранн. орд.

            Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
            bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
            //--------------------------------------------------- 6 --
            if (Ans==true)                      // Получилось :)
              {
               Alert ("Ордер ",Text,Ticket," модифицирован:)");
               break;                           // Из цикла модифи.
              }
            //--------------------------------------------------- 7 --
            int Error=GetLastError();           // Не получилось :(
            switch(Error)                       // Преодолимые ошибки
              {
               case 130:Alert("Неправильные стопы. Пробуем ещё раз.");
                  RefreshRates();               // Обновим данные
                  continue;                     // На след. итерацию
               case 136:Alert("Нет цен. Ждём новый тик..");
                  while(RefreshRates()==false)  // До нового тика
                     Sleep(1);                  // Задержка в цикле
                  continue;                     // На след. итерацию
               case 146:Alert("Подсистема торгов занята.Пробуем ещё");
                  Sleep(500);                   // Простое решение
                  RefreshRates();               // Обновим данные
                  continue;                     // На след. итерацию
                  // Критические ошибки
               case 2 : Alert("Общая ошибка.");
                  break;                        // Выход из switch
               case 5 : Alert("Старая версия клиентского терминала.");
                  break;                        // Выход из switch
               case 64: Alert("Счет заблокирован.");
                  break;                        // Выход из switch
               case 133:Alert("Торговля запрещена");
                  break;                        // Выход из switch
               default: Alert("Возникла ошибка ",Error);//Др. ошибки
              }
            break;                              // Из цикла модифи.
           }                                    // Конец цикла модифи.
         //------------------------------------------------------ 8 --
        }                                       // Конец анализа орд.
     }                                          // Конец перебора орд.
//--------------------------------------------------------------- 9 --
   return;                                      // Выход из start()
  }
//-------------------------------------------------------------- 10 --
 
VOLDEMAR:
Парни ну обьясните тупому как пользоваться iCustom
я пишу
double BBUP =iCustom(NULL, 0, "Bands","BandsPeriod","BandsShift","BandsDeviations",1,0);
double BBDW =iCustom(NULL, 0, "Bands","BandsPeriod","BandsShift","BandsDeviations",2,0);
и всёравно не получается ...
У меня задача получить сигналы от индикатора Bands верхней и нижней линии...... Именно Bands.....
https://docs.mql4.com/ru/indicators/iBands
 
FelixFX:

Всем добрый вечер!

В учебнике Сергея Ковалева нашел эксперта - трейлинг стоп. Скопировал его в MetaEditor, скомпилировал, но программа не работает. Пожалуйста, подскажите в чем причина. Может я что-то не так делаю.


Используйте вот это:

В пользовательских переменных пишем:

extern string   с9="------ Трейлингстоп ------";
extern int      TrailingStop=20; //Трейлинг-Стоп рыночного ордера. Если = 0 или то тарла нет
extern int      TrailingStep=5; //Шаг трала рыночного ордера
extern bool     WaitProfit = true; // Если true, то ждать профит = значению TrailingStop и только потом начинать тралить
                                    //Иначе, трейлинговать не дожидаясь положительного профита

extern string   с10=" -------- Прочие параметры -------------";
extern int      MAGIC=123456;//У ордеров открытых вручную MAGIC=0
extern int      Proskalz=10;//Проскальзывание

В Старте советника пишем:

// ----------------------------- Тралим ордера ------------------------------------
TrailingRyn_b(TrailingStop,TrailingStep,Proskalz,MAGIC,WaitProfit,false);

После старта в пользовательских подпрограммах пишем:

// =================================================================================================
// ************************* Трейлинг рыночных ордеров *********************************************
// =================================================================================================


// =================  TrailingRyn() =============================================================
// функция осуществляет трейлинг рыночных ордеров 
// ----------------------------------------------
void TrailingRyn_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, int MAGIC, bool WaitProfit,  bool UseTrailingSound) {
  string SMB=Symbol(); 
  int i;
  int MinLevel=MarketInfo(SMB,MODE_STOPLEVEL);//Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах   
  int SchBuy=SchBuy(MAGIC);
  int SchSell=SchSell(MAGIC);
  if(ryn_TrStop>=MinLevel && ryn_TrStep>0 && (SchBuy>0 || SchSell>0)){    
    for (i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {WriteError(i);}
      else {
        if (OrderSymbol()==SMB && OrderMagicNumber()==MAGIC){
          TrailingPositions_b(ryn_TrStop,ryn_TrStep,Proskalz,WaitProfit,UseTrailingSound);
        }
      }
    }
  }
 if(ryn_TrStop>=MinLevel && ryn_TrStep==0)
 Alert("Трейлинг невозможен - ryn_TrStep==0");
} 
// =================================================================================================

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions_b(int ryn_TrStop, int ryn_TrStep, int Proskalz, bool WaitProfit, bool UseTrailingSound){
  if(OrderType()==OP_BUY){
    if(!WaitProfit || (Bid-OrderOpenPrice())>ryn_TrStop*Point){
      if (OrderStopLoss()<Bid-(ryn_TrStop+ryn_TrStep-1)*Point){
        ModifyStopLoss_b(Bid-ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
  if(OrderType()==OP_SELL){
    if(!WaitProfit || OrderOpenPrice()-Ask>ryn_TrStop*Point) {
      if(OrderStopLoss()>Ask+(ryn_TrStop+ryn_TrStep-1)*Point || OrderStopLoss()==0){
        ModifyStopLoss_b(Ask+ryn_TrStop*Point,UseTrailingSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss_b(double ldStopLoss, bool UseTrailingSound){
  bool fm=false;
  string NameTrallingSound  = "ok.wav";// Наименование звукового файла для трейлинга
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if(fm!=0 && fm!=-1){
    if(UseTrailingSound) { PlaySound(NameTrallingSound);}
  }   
  if(fm==0 || fm==-1) { ModifError();}
}
//+------------------------------------------------------------------+

Функции типа ModifError() - это мои пользовательские функции - они просто выводят сообщение об ошибке. Напишите вместо них свои сообщения.

 
Спасибо .... Если бы мне это помогло я б тут вопрос не задавал .............
Причина обращения: