Изучаем и пишем вместе на MQL5 - страница 4

 
Здравствуйте! Если не трудно, кто нибудь может подсказать, правильно ли я вызвал индикаторы в советнике?

double perceptron()
  {
   double w1 = x1 - 100;
   double w2 = x2 - 100;
   double w3 = x3 - 100;
   double w4 = x4 - 100;
   double a1 = iCustom(NULL,0,"Custom CCI", 0);
   double a2 = iCustom(NULL,0,"Custom CCI", 7);
   double a3 = iCustom(NULL,0,"Custom CCI", 14);//это CCI

   double a4=iMA(NULL,0,21,0,0,0);          //это Force Index

   return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
  }
 
Avelox   :
Здравствуйте! Если не трудно, кто нибудь может подсказать, правильно ли я вызвал индикаторы в советнике?

double perceptron()
  {
   double w1 = x1 - 100;
   double w2 = x2 - 100;
   double w3 = x3 - 100;
   double w4 = x4 - 100;
   double a1 = iCustom(NULL,0,"Custom CCI", 0);
   double a2 = iCustom(NULL,0,"Custom CCI", 7);
   double a3 = iCustom(NULL,0,"Custom CCI", 14);//это CCI

   double a4=iMA(NULL,0,21,0,0,0);          //это Force Index

   return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
  }


нет.

iCustom, как и любая другая функция вызова индикатора, возвращает хэндл индикатора. Читайте документацию

 

Спасибо! Тогда так!?    double a2 = iCCI(NULL,0,7, 0);

                                   double a4=iForce(NULL,0,21,0,0); 

А компиллятор устраивает и прошлый вариант.

 

Посмотрите пример нашего кастомного индикатора Alligator https://www.mql5.com/en/code/9 

Там:

  1. Получается хэндл (iMA)
  2. Контролируется сколько данных рассчитано по этому хэндлу (BarsCalculated)
  3. Копируется порция данных  (CopyBuffer)
Alligator
Alligator
  • голосов: 14
  • 2010.01.26
  • MetaQuotes Software Corp.
  • www.mql5.com
The Alligator Indicator is a combination of Balance Lines (Moving Averages).
 
Avelox   :

Спасибо! Тогда так!?    double a2 = iCCI(NULL,0,7, 0);

                                   double a4=iForce(NULL,0,21,0,0); 

А компиллятор устраивает и прошлый вариант.


Компилятор то устраивает. У меня при переносе одного из индюков с 4-ки получился такой участок кода:


   iMA1Handle=iMA(NULL,0,Period1/2,0,3,PRICE_CLOSE); // Не забыть потом перемножить на 2
   iMA2Handle=  iMA(NULL,0, Period1,   0,3,PRICE_CLOSE);
   SQPeriod=NormalizeDouble(MathSqrt(Period1),0);

... Бла-бла-бла ...

На 4-ке было так:

   while (i>=0)
      {
         ExtMapBuffer2[i]=2*iMA(NULL,0,PeriodX/2,0,3,PRICE_CLOSE,i);
         ExtMapBuffer3[i]=  iMA(NULL,0, PeriodX,0,3,PRICE_CLOSE,i);
         ExtMapBuffer4[i]=ExtMapBuffer2[i]-ExtMapBuffer3[i];
         i--;
      }
   i=i2; // Возврат i для расчёта значений индюка
   while (i>=0)
      {
         ExtMapBuffer1[i]=iMAOnArray(ExtMapBuffer4,0,NormalizeDouble(MathSqrt(PeriodX),0),0,3,i);

... Бла-бла-бла ...

Построчного перевода не получилось ввиду отсутствия iMAOnArray в 5-ке, а include из беты ну очень не хочется юзать - фих знает... Ну дык я вначале так и перенёс 2*iMa....  Долго не мог понять, почему на выходе фигня получается. Матюкался жутко. Уже хотел на форум писать. Потом дошло - привычка взяла своё. Компилятор это устраивает, потому как в 5-ке возвращаемый  хендл имеет тип данных Int (число фактически), и его можно перемножить на 2. Но хендл чего получится на выходе - вопрос ещё тот, и работать так не будет

 

Начинаю пробовать перенос системы на пятерку и сразу засада

//+------------------------------------------------------------------+
//|                                                  GetInternet.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#import "wininet.dll"
  int InternetAttemptConnect (int x);
  int InternetOpenA(string sAgent, int lAccessType, 
                    string sProxyName = "", string sProxyBypass = "", 
                    int lFlags = 0);
  int InternetOpenUrlA(int hInternetSession, string sUrl, 
                       string sHeaders = "", int lHeadersLength = 0,
                       int lFlags = 0, int lContext = 0);
          
  int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, 
                       int& lNumberOfBytesRead[]);
  int InternetCloseHandle(int hInet);


#import "stdlib.ex5"
#import
input int Step = 300;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("Старт...");
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    Comment(GetURL("http://www.forexremote.net"));
    
  }
//+------------------------------------------------------------------+


//+----------------------------------------------------------------------------------------------------------+
//| Функция получения WEB страницы                                                                           |
//+----------------------------------------------------------------------------------------------------------+
string GetURL(string url)
{
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
       Alert("Ошибка при вызове InternetAttemptConnect()");
       return("");
     }

   int hInternetSession = InternetOpenA("Microsoft Internet Explorer", 1, "", "", 0);
   if(hInternetSession <= 0)
     {
       Alert("Ошибка при вызове InternetOpenA()");
       return("");         
     }

   int hURL = InternetOpenUrlA(hInternetSession, url, "", 0, 0, 0);
   if(hURL <= 0)
    {
       Print("Ошибка получения данных с узла!");
       //fComment("Ошибка получения данных с узла!",true);
       InternetCloseHandle(hInternetSession);
       return("");         
     } 
          
   int cBuffer[256];
   int dwBytesRead[1]; 
   string TXT = "";
   while(!IsStopped())
     {
       bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
       if(dwBytesRead[0] == 0)
           break;
       string text = "";   
       for(int i = 0; i < 256; i++)
         {
              text = text + CharToString(cBuffer[i] & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
              text = text + CharToString(cBuffer[i] >> 8 & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
           text = text + CharToString(cBuffer[i] >> 16 & 0x000000FF);
           if(StringLen(text) == dwBytesRead[0])
               break;
           text = text + CharToString(cBuffer[i] >> 24 & 0x000000FF);
         }
       TXT = TXT + text;
       //Sleep(500);

     }
     InternetCloseHandle(hInternetSession);
     return(TXT);
}
//+----------------------------------------------------------------------------------------------------------+
//| Конец Функции получения WEB страницы                                                                     |
//+----------------------------------------------------------------------------------------------------------+
При компиляции ошибок 0 но в итоге скрипт не работает :-(
 
maxandsoft   :

Начинаю пробовать перенос системы на пятерку и сразу засада

При компиляции ошибок 0 но в итоге скрипт не работает :-(


Что Вы подразумеваете под именем "скрипт". Судя по функциям в коде, Вы опубликовали код советника. Посмотрите Переход с MQL4
 
Rosh   :


Что Вы подразумеваете под именем "скрипт". Судя по функциям в коде, Вы опубликовали код советника. Посмотрите Переход с MQL4


да именно советник если дословно конечно. Мне необходимо получать ответ с сервера с помощью wininet.dll
 
maxandsoft   :


да именно советник если дословно конечно. Мне необходимо получать ответ с сервера с помощью wininet.dll

Попробуйте использовать юникодные версии этих функций. MQL5 использует Unicode-кодировку.

 
Rosh   :

Попробуйте использовать юникодные версии этих функций. MQL5 использует Unicode-кодировку.



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

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