Ваши вопросы по языку MQL4

AlexeyVik

Программист mql4 mql5
Я так тоже хотел сначала сделать, но дело всё в том, что советник читает данные с одного индюка, который обращается к определённому сайту. И к сожалению, чтение данных другой пары с пары, на которой установлен советник происходит с постоянной ошибкой "unknown subwindow number -1 for ObjectCreate function". Но зато пару на которой он установлен, читает нормально. Получается, что выход только один, ставить сова на разные пары, с которых будут собираться данные и уже на основе этих данных принимается решение об открытии ордеров. Вот поэтому и задал этот вопрос.
Тогда сделай глобальную переменную GlobalVariableSet(). Если она есть и/или её значение == ???
 

gince

Местный знаток
Как найти два верхних/нижних фрактала подряд? Рисунок ниже.
Код:
//+------------------------------------------------------------------+
//|                                           Dvigubas fraktalas.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_color1 Red
#property indicator_width1 2
#property indicator_buffers 1

double FRACTAL[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,119);
   SetIndexBuffer(0,FRACTAL);
   SetIndexLabel(0,"Fractal");
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int limit;
   
   
   
//---- последний посчитанный бар будет пересчитан
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars;
//---- основной цикл
   for(int i = limit; i > 0; i--)
     {           
         
         int f1 = GetFractal("", 0, 0);
         int f2 = GetFractal("", 0, 1);
         
        if( f1 == 1 && f2 == 1) FRACTAL[i] = High[i]+100*Point;
        else 
         if( f1 == 0 && f2 == 0) FRACTAL[i] = Low[i]- 100*Point;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
        //|
//+----------------------------------------------------------------------------+
int GetFractal(string sy="0", int tf=0, int nf=0) 
{
  if (sy=="" || sy=="0") sy=Symbol();
  int f=-1;
  int    i, k=iBars(sy, tf), kf;
  for (i=3; i<k; i++) 
  {
    if(iFractals(sy, tf, MODE_UPPER, i)>0)f=1;
    else
      if(iFractals(sy, tf, MODE_LOWER, i)>0)f=0;
    kf++;
    if (kf>nf) return(f);    
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}
 

Вложения

  • gbpusdh1_1.PNG
    gbpusdh1_1.PNG
    23,9 КБ · Просмотры: 36
Последнее редактирование модератором:

eevviill

Заблокирован
Как найти два верхних/нижних фрактала подряд? ...
Ну я делаю примерно так. Если с конца графика перебирать.
PHP:
int count_upper_frak;
double frak1;
double frak2;
for(int v=0;v<Bars-1;v++)
{
if(count_upper_frak>1) break;
if(iFr...!=empty_value && count_upper_frak==0) 
{
frak1=iFr...;
count_upper_frak++;
continue;
}
if(iFr...!=empty_value && count_upper_frak==1) 
{
frak2=iFr...;
count_upper_frak++;
}
}
 

gince

Местный знаток
Так для верхнего ? А красная проверка небудет тоже самое , что и первая ?
Код:
int count_upper_frak; 
double frak1; 
double frak2; 
for(int v=0;v<Bars-1;v++) 
{ 
   if(count_upper_frak>1) break; 
   if(iFractals(NULL, 0, MODE_UPPER, v)!=EMPTY_VALUE && count_upper_frak==0)  
   { 
      frak1=iFractals(NULL, 0, MODE_UPPER, v); 
      count_upper_frak++; 
      continue; 
   } 
   [COLOR="Red"]if(iFractals(NULL, 0, MODE_UPPER, v)[/COLOR]!=empty_value && count_upper_frak==1)  
   { 
      frak2=iFractals(NULL, 0, MODE_UPPER, v); 
      count_upper_frak++; 
   }
   if(count_upper_frak==2) 
      bufferUPPER[v]= frak2+100*Point;
}
 

eevviill

Заблокирован
Так для верхнего ? А красная проверка небудет тоже самое , что и первая ?
Код:
int count_upper_frak; 
double frak1; 
double frak2; 
for(int v=0;v<Bars-1;v++) 
{ 
   if(count_upper_frak>1) break; 
   if(iFractals(NULL, 0, MODE_UPPER, v)!=EMPTY_VALUE && count_upper_frak==0)  
   { 
      frak1=iFractals(NULL, 0, MODE_UPPER, v); 
      count_upper_frak++; 
      continue; 
   } 
   [COLOR="Red"]if(iFractals(NULL, 0, MODE_UPPER, v)[/COLOR]!=empty_value && count_upper_frak==1)  
   { 
      frak2=iFractals(NULL, 0, MODE_UPPER, v); 
      count_upper_frak++; 
   }
   if(count_upper_frak==2) 
      bufferUPPER[v]= frak2+100*Point;
}
Да. Это для верхнего. Для нижнего аналогично.
 

eevviill

Заблокирован
MarketInfo(Symbol(),MODE_TICKVALUE)
Что то не могу понять что оно возвращает.
Возвращает 1(еврдол). Хотя по идеи должно быть 0.01(дол).
RVD
 

ansol

Местный знаток
MarketInfo(Symbol(),MODE_TICKVALUE)
Что то не могу понять что оно возвращает.
Возвращает 1(еврдол). Хотя по идеи должно быть 0.01(дол).
RVD

Возвращает цену 1 пункта. Для евробакса в пятизнаке это 1 доллар, в 4-знаке это 10 долларов. Для кросс курсов там более разнообразные значения бывают, скажем, для GBPAUD = 0.9501 прямо сейчас на пятизнаке

P.S. И да, это, конечно при объеме в 1 лот 1 пункт столько стоит.
 
Последнее редактирование:

ansol

Местный знаток
Теперь понятно.
Думаю не логичней ли было за мин лот сделать это?...

Я встречал минлот 0.01 и 0.1, но возможны варианты более другие. Пришлось бы самому в проге нормировать, а с запятыми как-то в MQL4 не очень, пусть уж лучше выдают как положено - на единицу и делить и умножать приятней :D
 

gince

Местный знаток
MODE_TICKVALUE 16 Размер минимального изменения цены инструмента в валюте депозита
MODE_TICKSIZE 17 Минимальный шаг изменения цены инструмента в пунктах
 

ansol

Местный знаток
Имеется:
PHP:
#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
...

  int rv = InternetAttemptConnect(0);
  if (rv != 0)
   {
    Print("Ошибка при вызове InternetAttemptConnect()");
    return("");
   }
  int hInternetSession = InternetOpenA("Microsoft Internet Explorer", 0, "", "", 0);
  if (hInternetSession <= 0)
   {
    Print("Ошибка при вызове InternetOpenA()/Session");
    return("");
   }
  int hURL = InternetOpenUrlA(hInternetSession, url, "", 0, 0, 0);
  if (hURL <= 0)
   {
    Print("Ошибка при вызове InternetOpenUrlA() ",url);
    InternetCloseHandle(hInternetSession);
    return(0);
   }
И ошибка:
2013.11.04 09:48:18 News EURCHF,M15: Ошибка при вызове InternetOpenUrlA() _http://cdn.dailyfx.com/files/Calendar-11-03-2013.csv

Вообщем, пропало недавно. Индикатор новостей с открытым кодом. Откуда берется это всё и как исправить? Вижу, что в wininet.dll это было, может недавнее обновление винды исправило dll-ку? т.к. по этому урлу список новостей выкачивается с полпинка, можете проверить.
 

Вложения

  • News.mq4
    25,9 КБ · Просмотры: 31
Последнее редактирование модератором:

SteelKnight84

Прохожий
Простейший вопрос для программера, но для меня, не знающего язык - дебри.
Может кто знает что надо изменить в советнике, чтобы он мани-менеджмент применял с шагом не в 0.1, а в 0.01?
 

Вложения

  • Adjustable_MA.mq4
    7,8 КБ · Просмотры: 15

eevviill

Заблокирован
...
Вообщем, пропало недавно. Индикатор новостей с открытым кодом. Откуда берется это всё и как исправить? Вижу, что в wininet.dll это было, может недавнее обновление винды исправило dll-ку? т.к. по этому урлу список новостей выкачивается с полпинка, можете проверить.
Попробуй или этот работает. Если нет, то может и длл виновата.
 

Вложения

  • THV3 FFCal.mq4
    47,4 КБ · Просмотры: 41

eevviill

Заблокирован
У меня вопрос.
Я правильно понял. Возвращает целое число? Если да, то логично ли это?
double rez=5/2;
Alert(rez);
 

ansol

Местный знаток
У меня вопрос.
Я правильно понял. Возвращает целое число? Если да, то логично ли это?
double rez=5/2;
Alert(rez);

Понял правильно 5/2 = 2, потом, конечно, приводится к типу дубль, получается 2.0
Нелогично, они так время ЦП экономят, как я понял.
Так что надо 5.0/2 или 5/2.0
 

ansol

Местный знаток
Попробуй или этот работает. Если нет, то может и длл виновата.

Вот долбанные же прогеры, а?! Ну кто ж алертом ошибки выдаёт?!
Начинает сыпать алерты "webpage cannot be downloaded" и хрен что сделать в это время с терминалом, пришлось убить процесс.
Да, dll-ка видимо перестала работать :angry: А как чинить? Очевидно, что описание InternetOpenUrlA страдает неточностью в этой версии. Должен быть простой способ починить, ммм? :please:
 

eevviill

Заблокирован
Вот долбанные же прогеры, а?! Ну кто ж алертом ошибки выдаёт?!
Начинает сыпать алерты "webpage cannot be downloaded" и хрен что сделать в это время с терминалом, пришлось убить процесс.
Да, dll-ка видимо перестала работать :angry: А как чинить? Очевидно, что описание InternetOpenUrlA страдает неточностью в этой версии. Должен быть простой способ починить, ммм? :please:
У меня тот индикатор что я прикреплял работает.
 

ansol

Местный знаток
У меня тот индикатор что я прикреплял работает.

И у меня работал в начале октября точно! Обновления на винду выходили где-то 14-го, может тогда и перестало, я не зафиксировал момент. И ошибка именно в этом месте, счас-то уже ясно. Важно узнать, откуда берется описание InternetOpenUrlA и тогда можно исправить самому. Либо: где ты брал свой индюк? Там автор должен был исправленную версию кинуть (наверное :nda: ) - тогда можно полезно разобраться с проблемой
 

eevviill

Заблокирован
И у меня работал в начале октября точно! Обновления на винду выходили где-то 14-го, может тогда и перестало, я не зафиксировал момент. И ошибка именно в этом месте, счас-то уже ясно. Важно узнать, откуда берется описание InternetOpenUrlA и тогда можно исправить самому. Либо: где ты брал свой индюк? Там автор должен был исправленную версию кинуть (наверное :nda: ) - тогда можно полезно разобраться с проблемой
Этот индикатор уже полтора года не менялся. Качал из своего поста.
 
Последнее редактирование:
Верх