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

_SERG_

Активный участник
Вставил в сову только что вот это:
PHP:
#property show_inputs
Получил:
'GAPnews.mq4' GAPnews.mq4 1 1
'stdlib.mqh' stdlib.mqh 1 1
no OnStart function defined in the script 0 0
0 error(s), 1 warning(s), compile time: 3448 msec 1 2
Что и требовалось доказать. Эта директива в сове не допустима, а?
Без нее всё без ошибок идет
Согласен, в соответствии с документацией.
Метаквотовци вероятно и изменили название, чтобы устранить
путаницу между совами и скриптами.

А что касается оригинального кода, таки речь идёт о сове, поскольку скрипт не зациклен, и надо накопить 30 котировок.

Я так понимаю было желание достичь где-то какого результата:
 

Вложения

  • TEST_Лента_по_инструменту.ex4
    24,7 КБ · Просмотры: 24
Последнее редактирование:

Monachus

Местный знаток
Доброго времени суток!
Коллеги, нужна функция для импорта в советник. Функция должна возвращать количество пунктов в профите/убытке для серии разнонаправленных ордеров разного объема,для выставления тейка не в валюте, а в пунктах.Сам так и не смог сочинить.
 

_SERG_

Активный участник
Доброго времени суток!
Коллеги, нужна функция для импорта в советник. Функция должна возвращать количество пунктов в профите/убытке для серии разнонаправленных ордеров разного объема,для выставления тейка не в валюте, а в пунктах.Сам так и не смог сочинить.
А ты стоимость одного пункта для прямых, обратных и кроссовых инструментов посчитай, по имеющимся в терминале данным, и сразу сочинишь.:laugh:
 

ivansss

Новичок форума
Товарисчи с чем может быть связана такая ошибка "is not expert and cannot be executed?"
Компилирует без ошибок ,но не работает
 

Вложения

  • !MTH Renko Chart Builder Indi Ver 03.mq4
    32,6 КБ · Просмотры: 25

Cemen4yk1

Местный житель
Товарисчи с чем может быть связана такая ошибка "is not expert and cannot be executed?"
Компилирует без ошибок ,но не работает
вам же английским языком терминал сообщает что это не эксперт, а вы из папки экспертов его выбираете, переложите в папку индикаторов и будет ок
 

BladeRunner2342

Прохожий
Посмотрите пожалуйста код советника

Вчера начал изучать mql, и написал советник. В Mql 4 новичок полный.
Суть советника:
Советник основан на медвежьем и бычьем поглощении. Но объём свечи, которая поглощает должен быть больше объёма свечи, которую поглощают.
Советник работает в определённое время, время задаётся во внешних переменных. Ордер открывается по условию, а закрывается, когда закрывается нулевая свеча.

Вот первый код, который я написал, подскажите пожалуйста,посоветуйте что-нибудь, у меня ещё ошибки выскакивают, в чем дело понять не могу, позже хочу добавить к советнику индикатор RSI, но пока ума хватило только на это. Так же хотелось бы, чтобы советник работал не только на часовых графиках, но и на любом заданном таймфрейме и валютной паре

И подскажите пожалуйста, как добавлять красиво код сюда и правильно

//+=======================Внешние переменные==================================================+//

extern int OpenTime = 8; //время открытия
extern int CloseTime = 19; //время закрытия
extern double Lots = 0.1 //лот

//+========================================================================+//





//+=================================Начало Функции OnTick()=======================================+//

void OnTick()
{
bool is_siesta = false;
int numbers = Digits(); //количество знаков после запятой на текущем финансовом инструкменте
double SL = NormalizeDouble(Open[1], Digits());
int ticket1;
int ticket2;

if(Hour()>= OpenTime && Hour()< CloseTime)
is_siesta=true;

if(is_siesta) //если время работы советника соблюдается....
{

if( (Close[1] > Open[1]
&& Close[2] < Open[2])
&& (NormalizeDouble(Close[1] - Open[1],numbers) > NormalizeDouble(Open[2] - Close[2],numbers))
&& Volume[1] > Volume[2])
{
if(TimeHour(TimeCurrent()) == Time[0])
{
ticket1 = OrderSend(Symbol(), OP_BUY , Lots, Ask, 3, Low[1],0, "", 123, 0 , clrBlue);

if(ticket1 < 0)
Print("Ошибка открытия ордера");
else
Print("Ордер на покупку открылся");

}

if(newBar())
{
OrderSelect(ticket1, SELECT_BY_TICKET, MODE_TRADES);
OrderClose(ticket1, Lots, Bid, 3, clrNONE);
}

}


if( (Close[1] < Open[1]
&& Close[2] > Open[2])
&& (NormalizeDouble(Open[1] - Close[1],numbers) > NormalizeDouble(Close[2] - Open[2],numbers))
&& Volume[1] > Volume[2])
{
if(TimeHour(TimeCurrent()) == Time[0])
{
ticket2 = OrderSend(Symbol(), OP_SELL , Lots, Bid, 3, Close[1],0, "", 321, 0 , clrRed);

if(ticket2 < 0)
Print("Ошибка открытия ордера");
else
Print("Ордер на покупку открылся");
}

if(newBar())
{
OrderSelect(ticket2, SELECT_BY_TICKET, MODE_TRADES);
OrderClose(ticket2, Lots, Ask, 3, clrNONE);
}

}

}

}

//+---------------------Завершение функции Ontick()----------------------+//







//+======================Начало функции newbar()===============================================+//

bool newBar()
{
static datetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar != curbar)
{
lastbar = curbar;
return (true);
}
else return(false);
}

//+==========================Конец функции newbar()===========================================+//
 

Вложения

  • Reversal day.mq4
    3,1 КБ · Просмотры: 32
Последнее редактирование модератором:

AlexeyVik

Программист mql4 mql5
Вчера начал изучать mql, и написал советник. В Mql 4 новичок полный.
Суть советника:
Советник основан на медвежьем и бычьем поглощении. Но объём свечи, которая поглощает должен быть больше объёма свечи, которую поглощают.
Советник работает в определённое время, время задаётся во внешних переменных. Ордер открывается по условию, а закрывается, когда закрывается нулевая свеча.

Вот первый код, который я написал, подскажите пожалуйста,посоветуйте что-нибудь, у меня ещё ошибки выскакивают, в чем дело понять не могу, позже хочу добавить к советнику индикатор RSI, но пока ума хватило только на это. Так же хотелось бы, чтобы советник работал не только на часовых графиках, но и на любом заданном таймфрейме и валютной паре

И подскажите пожалуйста, как добавлять красиво код сюда и правильно

//+=======================Внешние переменные==================================================+//

extern int OpenTime = 8; //время открытия
extern int CloseTime = 19; //время закрытия
extern double Lots = 0.1 //лот

//+========================================================================+//





//+=================================Начало Функции OnTick()=======================================+//

void OnTick()
{
bool is_siesta = false;
int numbers = Digits(); //количество знаков после запятой на текущем финансовом инструкменте
double SL = NormalizeDouble(Open[1], Digits());
int ticket1;
int ticket2;

if(Hour()>= OpenTime && Hour()< CloseTime)
is_siesta=true;

if(is_siesta) //если время работы советника соблюдается....
{

if( (Close[1] > Open[1]
&& Close[2] < Open[2])
&& (NormalizeDouble(Close[1] - Open[1],numbers) > NormalizeDouble(Open[2] - Close[2],numbers))
&& Volume[1] > Volume[2])
{
if(TimeHour(TimeCurrent()) == Time[0])
{
ticket1 = OrderSend(Symbol(), OP_BUY , Lots, Ask, 3, Low[1],0, "", 123, 0 , clrBlue);

if(ticket1 < 0)
Print("Ошибка открытия ордера");
else
Print("Ордер на покупку открылся");

}

if(newBar())
{
OrderSelect(ticket1, SELECT_BY_TICKET, MODE_TRADES);
OrderClose(ticket1, Lots, Bid, 3, clrNONE);
}

}


if( (Close[1] < Open[1]
&& Close[2] > Open[2])
&& (NormalizeDouble(Open[1] - Close[1],numbers) > NormalizeDouble(Close[2] - Open[2],numbers))
&& Volume[1] > Volume[2])
{
if(TimeHour(TimeCurrent()) == Time[0])
{
ticket2 = OrderSend(Symbol(), OP_SELL , Lots, Bid, 3, Close[1],0, "", 321, 0 , clrRed);

if(ticket2 < 0)
Print("Ошибка открытия ордера");
else
Print("Ордер на покупку открылся");
}

if(newBar())
{
OrderSelect(ticket2, SELECT_BY_TICKET, MODE_TRADES);
OrderClose(ticket2, Lots, Ask, 3, clrNONE);
}

}

}

}

//+---------------------Завершение функции Ontick()----------------------+//







//+======================Начало функции newbar()===============================================+//

bool newBar()
{
static datetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar != curbar)
{
lastbar = curbar;
return (true);
}
else return(false);
}

//+==========================Конец функции newbar()===========================================+//
Я уже исправлял тебе эту ошибку на форуме mql4
extern double Lots = 0.1 //лот
пропущена точка с запятой.
Вообще запомни, если вдруг выскочило невероятное количество ошибок и ссылаются на строку в которой не может быть ошибки, как здесь
'void' - illegal use of 'void' type Reversal day.mq4 16 1
ссылается на тип функции OnTick() то это точно пропущена ;
 

Дмитрий 2010

Интересующийся
Добрый день специалистам. Помогите решить не решаемую проблему. Написан скрипт который создает уровни Фибоначчи, и индикатор который должен читать фибоначчи по имени. Проблема в том что не могу найти функцию которая возвращала бы цену уровня например 50%. Буду благодарен за ответ.(Сюда обращаюсь в крайнем случае но неделя поиска в интернете и тех документации не дала результата, нашол только математический расчёт, очень жаль если это единственный вариант)
 

eevviill2

Местный знаток
Добрый день специалистам. Помогите решить не решаемую проблему. Написан скрипт который создает уровни Фибоначчи, и индикатор который должен читать фибоначчи по имени. Проблема в том что не могу найти функцию которая возвращала бы цену уровня например 50%. Буду благодарен за ответ.(Сюда обращаюсь в крайнем случае но неделя поиска в интернете и тех документации не дала результата, нашол только математический расчёт, очень жаль если это единственный вариант)
https://www.mql5.com/en/blogs/post/662291
note5

Раньше там был. Пока дикари не удалили меня:D
 

K_i_r_i_t_o-04

Прохожий
Всем привет) Такой вопрос можно ли каким то образом подправить код чтоб i при нажатии клавиши возращало свое значение в начало первого оператора if, иначе следующая линия строиться не будет, если имя останется тем же =/
#define VK_D 0x44
void OnChartEvent(const int id, // идентификатор события
const long& lparam, // параметр события типа long
const double& dparam, // параметр события типа double
const string& sparam) // параметр события типа string
{
Comment(__FUNCTION__,": id=",id," lparam=",lparam," dparam=",dparam," sparam=",sparam);

int y =(int)dparam;
datetime dt =0;
double price =0;
int window=0;
int x =(int)lparam;
int i;

if (id==CHARTEVENT_CLICK)
{
ChartXYToTimePrice(0,x,y,window,dt,price);
Print ("I=",i);
ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);

if(id==CHARTEVENT_KEYDOWN)
{ switch(int(lparam))
{ case VK_D:
i=rand();

}
}}
}
 

gince

Местный знаток
Есть открыто пять графиков на одной валютной паре. В них поставил по индикатору.
//+------------------------------------------------------------------+
//| ProjectName |
//| Copyright 2012, CompanyName |
//| _http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "_https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window


string gl_hwnd="";
//+------------------------------------------------------------------+
int init()
{
//---

//---
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int per=Period();
string st_hwnd="";
switch(per)
{
case 1:st_hwnd="M1";break;
case 5:st_hwnd="M5";break;
case 15:st_hwnd="M15";break;
case 30:st_hwnd="M30";break;
case 60:st_hwnd="H1";break;
case 240:st_hwnd="H4";break;
case 1440:st_hwnd="D1";break;
}

per=WindowHandle(Symbol(),Period());
GlobalVariableSet(st_hwnd,per);
return(0);
}
//+------------------------------------------------------------------+
Он должен отправлять хендлы в глобальные переменные.
Дальше эти хендлы должен взять советник.
//+------------------------------------------------------------------+
//| hwnd.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. |
//| _https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "_https://www.mql5.com"
#property version "1.00"
#property strict

double hwnd[]={0,0,0,0,0,0,0};

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
hwnd[0]=GlobalVariableGet("M1");
hwnd[1]=GlobalVariableGet("M5");
hwnd[2]=GlobalVariableGet("M15");
hwnd[3]=GlobalVariableGet("M30");
hwnd[4]=GlobalVariableGet("H1");
hwnd[4]=GlobalVariableGet("H4");
hwnd[4]=GlobalVariableGet("D1");


//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{ }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
int i;
for(i=0;i<7;i++)
{
Print(DoubleToStr(hwnd,0));
}
}
//+------------------------------------------------------------------+

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

Вобще запутался, появились ошибки.
 

Вложения

  • i_hwnd.mq4
    1,3 КБ · Просмотры: 24
  • e_hwnd.mq4
    1,7 КБ · Просмотры: 23
Последнее редактирование модератором:

AlexeyVik

Программист mql4 mql5
Есть открыто пять графиков на одной валютной паре. В них поставил по индикатору.
//+------------------------------------------------------------------+
//| ProjectName |
//| Copyright 2012, CompanyName |
//| http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window


string gl_hwnd="";
//+------------------------------------------------------------------+
int init()
{
//---

//---
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int per=Period();
string st_hwnd="";
switch(per)
{
case 1:st_hwnd="M1";break;
case 5:st_hwnd="M5";break;
case 15:st_hwnd="M15";break;
case 30:st_hwnd="M30";break;
case 60:st_hwnd="H1";break;
case 240:st_hwnd="H4";break;
case 1440:st_hwnd="D1";break;
}

per=WindowHandle(Symbol(),Period());
GlobalVariableSet(st_hwnd,per);
return(0);
}
//+------------------------------------------------------------------+
Он должен отправлять хендлы в глобальные переменные.
Дальше эти хендлы должен взять советник.
//+------------------------------------------------------------------+
//| hwnd.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

double hwnd[]={0,0,0,0,0,0,0};

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
hwnd[0]=GlobalVariableGet("M1");
hwnd[1]=GlobalVariableGet("M5");
hwnd[2]=GlobalVariableGet("M15");
hwnd[3]=GlobalVariableGet("M30");
hwnd[4]=GlobalVariableGet("H1");
hwnd[4]=GlobalVariableGet("H4");
hwnd[4]=GlobalVariableGet("D1");


//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{ }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
int i;
for(i=0;i<7;i++)
{
Print(DoubleToStr(hwnd,0));
}
}
//+------------------------------------------------------------------+

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

Вобще запутался, появились ошибки.

А ничего что массив с индексом 4 повторяется 3 раза?
hwnd[4]=GlobalVariableGet("H1");
hwnd[4]=GlobalVariableGet("H4");
hwnd[4]=GlobalVariableGet("D1");

И неплохо было-бы массив заполнять хоть и нулями, но всё-же типа double
double hwnd[]={0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
А ещё лучше сделать так
double hwnd[7];
 
Последнее редактирование:

gince

Местный знаток
Нашел еще несколько ошибок, дальшесмотреть буду
 

gince

Местный знаток
Помогите с ошибкой 4051 при создании кнопки

2016.09.01 20:19:19.784 Panel GBPUSD,M5: initialized
2016.09.01 20:19:19.784 Panel GBPUSD,M5: Error creating button. Error code 0. no error
2016.09.01 20:19:19.784 Panel GBPUSD,M5: ButtonCreate: failed to create the button! Error code = 4051

2016.09.01 20:19:18.115 Expert Panel GBPUSD,M5: loaded successfully
 

Вложения

  • Panel.mq4
    13,4 КБ · Просмотры: 26

mobidik

-----
Помогите с ошибкой 4051 при создании кнопки

2016.09.01 20:19:19.784 Panel GBPUSD,M5: initialized
2016.09.01 20:19:19.784 Panel GBPUSD,M5: Error creating button. Error code 0. no error
2016.09.01 20:19:19.784 Panel GBPUSD,M5: ButtonCreate: failed to create the button! Error code = 4051

2016.09.01 20:19:18.115 Expert Panel GBPUSD,M5: loaded successfully

Удали 36 строку:
PHP:
hwnd=WindowHandle(Symbol(),Period());
 

st2050

Гуру форума
Здравствуйте, коллеги.

Скажите пожалуйста какой-либо способ расположить графический объект над графиком при том, что в свойствах чарта график сверху.
 
Верх