Soy un novato y tengo el primer problema: ¿por qué la compilación da un error? ¿Cómo solucionarlo?
//+------------------------------------------------------------------+ //|moy var1.mq4 | #property copyright "Copyright 2019, MetaQuotes Software Corp." #enlace de propiedad "https://www.mql5.com" #versión de la propiedad "1.00" #propiedad estricta
extern int Magia = 111; int CuentaVenta() //+------------------------------------------------------------------+ //|Función de inicialización de expertos| //+-----------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEED); } //+------------------------------------------------------------------+ //| Función de desinicialización de expertos| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| función de tic experto| //+------------------------------------------------------------------+ void OnTick() { { int cuenta =0;
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Хочу собрать ПК для работы с МТ 5, что посоветуете и...
Por la tarde. No puedo dibujar un objeto Fibo(OBJ_FIBO) en MT-4 sin extender las líneas hacia la derecha. Al cambiar el parámetro OBJPROP_RAY_RIGHT, la semirrecta se sigue dibujando hacia la derecha. Y el script del tutorial se comporta de la misma manera. He intentado cambiarlo por OBJPROP_RAY en cuanto al segmento, no funciona. Si eres capaz de explicar la razón. Gracias de antemano.
Sergey Fionin: Por la tarde. No puedo dibujar un objeto Fibo (OBJ_FIBO) en MT-4 sin extender las líneas hacia la derecha. Al cambiar el parámetro OBJPROP_RAY_RIGHT, la semirrecta se sigue dibujando hacia la derecha. Y el script del tutorial se comporta de la misma manera. He intentado cambiarlo por OBJPROP_RAY en cuanto al segmento, no funciona. Si eres capaz de explicar la razón. Gracias de antemano.
El asunto es que MT4 no es MT5 y si el código compila, no significa que vaya a funcionar.
El hecho es que MT4 no es MT5, y si el código compila, esto no significa que funcionará.
Entiendo. Y es por eso que pregunto si la configuración " Continuación del objeto a la derecha" por medio de OBJPROP_RAY_RIGHT realmente funciona en MT-4 para ( OBJ_FIBO ) ? Se toma un ejemplo de un guiónde un libro de texto para mt-4.
#property strict//--- описание #property description"Скрипт строит графический объект \"Уровни Фибоначчи\"."#property description"Координаты точек привязки задаются в процентах от"#property description"размеров окна графика."//--- покажем окно входных параметров при запуске скрипта #property script_show_inputs//--- входные параметры скрипта inputstring InpName= "FiboLevels" ; // Имя объекта inputint InpDate1= 10 ; // Дата 1-ой точки в % inputint InpPrice1= 65 ; // Цена 1-ой точки в % inputint InpDate2= 90 ; // Дата 2-ой точки в % inputint InpPrice2= 85 ; // Цена 2-ой точки в % inputcolor InpColor= clrRed ; // Цвет объекта inputENUM_LINE_STYLE InpStyle= STYLE_DASHDOTDOT ; // Стиль линии inputint InpWidth= 1 ; // Толщина линии inputbool InpBack= false ; // Объект на заднем плане inputbool InpSelection= true ; // Выделить для перемещений inputbool InpRayRight= false ; // Продолжение объекта вправо inputbool InpHidden= true ; // Скрыт в списке объектов inputlong InpZOrder= 0 ; // Приоритет на нажатие мышью //+------------------------------------------------------------------+ //| Cоздает "Уровни Фибоначчи" по заданным координатам | //+------------------------------------------------------------------+ bool FiboLevelsCreate( constlong chart_ID= 0 , // ID графика conststring name= "FiboLevels" , // имя объекта constint sub_window= 0 , // номер подокна datetime time1= 0 , // время первой точки double price1= 0 , // цена первой точки datetime time2= 0 , // время второй точки double price2= 0 , // цена второй точки constcolor clr= clrRed , // цвет объекта constENUM_LINE_STYLE style= STYLE_SOLID , // стиль линии объекта constint width= 1 , // толщина линии объекта constbool back= false , // на заднем плане constbool selection= true , // выделить для перемещений constbool ray_right= false , // продолжение объекта вправо constbool hidden= true , // скрыт в списке объектов constlong z_order= 0 ) // приоритет на нажатие мышью
{
//--- установим координаты точек привязки, если они не заданы
ChangeFiboLevelsEmptyPoints(time1,price1,time2,price2);
//--- сбросим значение ошибки ResetLastError ();
//--- создадим "Уровни Фибоначчи" по заданным координатам if (! ObjectCreate (chart_ID,name, OBJ_FIBO ,sub_window,time1,price1,time2,price2))
{
Print ( __FUNCTION__ ,
": не удалось создать \"Уровни Фибоначчи\"! Код ошибки = " , GetLastError ());
return ( false );
}
//--- установим цвет ObjectSetInteger (chart_ID,name, OBJPROP_COLOR ,clr);
//--- установим стиль линии ObjectSetInteger (chart_ID,name, OBJPROP_STYLE ,style);
//--- установим толщину линии ObjectSetInteger (chart_ID,name, OBJPROP_WIDTH ,width);
//--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger (chart_ID,name, OBJPROP_BACK ,back);
//--- включим (true) или отключим (false) режим выделения объекта для перемещений //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObjectSetInteger (chart_ID,name, OBJPROP_SELECTABLE ,selection);
ObjectSetInteger (chart_ID,name, OBJPROP_SELECTED ,selection);
//--- включим (true) или отключим (false) режим продолжения отображения объекта вправо ObjectSetInteger (chart_ID,name, OBJPROP_RAY_RIGHT ,ray_right);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger (chart_ID,name, OBJPROP_HIDDEN ,hidden);
//--- установи приоритет на получение события нажатия мыши на графике ObjectSetInteger (chart_ID,name, OBJPROP_ZORDER ,z_order);
//--- успешное выполнение return ( true );
}
//+------------------------------------------------------------------+ //| Задает количество уровней и их параметры | //+------------------------------------------------------------------+ bool FiboLevelsSet( int levels, // количество линий уровня double &values[], // значения линий уровня color &colors[], // цвет линий уровня ENUM_LINE_STYLE &styles[], // стиль линий уровня int &widths[], // толщина линий уровня constlong chart_ID= 0 , // ID графика conststring name= "FiboLevels" ) // имя объекта
{
//--- проверим размеры массивов if (levels!= ArraySize (colors) || levels!= ArraySize (styles) ||
levels!= ArraySize (widths) || levels!= ArraySize (widths))
{
Print ( __FUNCTION__ , ": длина массива не соответствует количеству уровней, ошибка!" );
return ( false );
}
//--- установим количество уровней ObjectSetInteger (chart_ID,name, OBJPROP_LEVELS ,levels);
//--- установим свойства уровней в цикле for ( int i= 0 ;i<levels;i++)
{
//--- значение уровня ObjectSetDouble (chart_ID,name, OBJPROP_LEVELVALUE ,i,values[i]);
//--- цвет уровня ObjectSetInteger (chart_ID,name, OBJPROP_LEVELCOLOR ,i,colors[i]);
//--- стиль уровня ObjectSetInteger (chart_ID,name, OBJPROP_LEVELSTYLE ,i,styles[i]);
//--- толщина уровня ObjectSetInteger (chart_ID,name, OBJPROP_LEVELWIDTH ,i,widths[i]);
//--- описание уровня ObjectSetString (chart_ID,name, OBJPROP_LEVELTEXT ,i, DoubleToString ( 100 *values[i], 1 ));
}
//--- успешное выполнение return ( true );
}
//+------------------------------------------------------------------+ //| Перемещает точку привязки "Уровней Фибоначчи" | //+------------------------------------------------------------------+ bool FiboLevelsPointChange( constlong chart_ID= 0 , // ID графика conststring name= "FiboLevels" , // имя объекта constint point_index= 0 , // номер точки привязки datetime time= 0 , // координата времени точки привязки double price= 0 ) // координата цены точки привязки
{
//--- если координаты точки не заданы, то перемещаем ее на текущий бар с ценой Bid if (!time)
time= TimeCurrent ();
if (!price)
price= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- сбросим значение ошибки ResetLastError ();
//--- переместим точку привязки if (! ObjectMove (chart_ID,name,point_index,time,price))
{
Print ( __FUNCTION__ ,
": не удалось переместить точку привязки! Код ошибки = " , GetLastError ());
return ( false );
}
//--- успешное выполнение return ( true );
}
//+------------------------------------------------------------------+ //| Удаляет "Уровни Фибоначчи" | //+------------------------------------------------------------------+ bool FiboLevelsDelete( constlong chart_ID= 0 , // ID графика conststring name= "FiboLevels" ) // имя объекта
{
//--- сбросим значение ошибки ResetLastError ();
//--- удалим объект if (! ObjectDelete (chart_ID,name))
{
Print ( __FUNCTION__ ,
": не удалось удалить \"Уровни Фибоначчи\"! Код ошибки = " , GetLastError ());
return ( false );
}
//--- успешное выполнение return ( true );
}
//+------------------------------------------------------------------+ //| Проверяет значения точек привязки "Уровней Фибоначчи" и для | //| пустых значений устанавливает значения по умолчанию | //+------------------------------------------------------------------+ void ChangeFiboLevelsEmptyPoints( datetime &time1, double &price1,
datetime &time2, double &price2)
{
//--- если время второй точки не задано, то она будет на текущем баре if (!time2)
time2= TimeCurrent ();
//--- если цена второй точки не задана, то она будет иметь значение Bid if (!price2)
price2= SymbolInfoDouble ( Symbol (), SYMBOL_BID );
//--- если время первой точки не задано, то она лежит на 9 баров левее второй if (!time1)
{
//--- массив для приема времени открытия 10 последних баров datetime temp[ 10 ];
CopyTime ( Symbol (), Period (),time2, 10 ,temp);
//--- установим первую точку на 9 баров левее второй
time1=temp[ 0 ];
}
//--- если цена первой точки не задана, то сдвинем ее на 200 пунктов ниже второй if (!price1)
price1=price2- 200 * SymbolInfoDouble ( Symbol (), SYMBOL_POINT );
}
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart ()
{
//--- проверим входные параметры на корректность if (InpDate1< 0 || InpDate1> 100 || InpPrice1< 0 || InpPrice1> 100 ||
InpDate2< 0 || InpDate2> 100 || InpPrice2< 0 || InpPrice2> 100 )
{
Print ( "Ошибка! Некорректные значения входных параметров!" );
return ;
}
//--- количество видимых баров в окне графика int bars=( int ) ChartGetInteger ( 0 , CHART_VISIBLE_BARS );
//--- размер массива price int accuracy= 1000 ;
//--- массивы для хранения значений дат и цен, которые будут использованы //--- для установки и изменения координат точек привязки "Уровней Фибоначчи" datetime date[];
double price[];
//--- выделение памяти ArrayResize (date,bars);
ArrayResize (price,accuracy);
//--- заполним массив дат ResetLastError ();
if ( CopyTime ( Symbol (), Period (), 0 ,bars,date)==- 1 )
{
Print ( "Не удалось скопировать значения времени! Код ошибки = " , GetLastError ());
return ;
}
//--- заполним массив цен //--- найдем максимальное и минимальное значение графика double max_price= ChartGetDouble ( 0 , CHART_PRICE_MAX );
double min_price= ChartGetDouble ( 0 , CHART_PRICE_MIN );
//--- определим шаг изменения цены и заполним массив double step=(max_price-min_price)/accuracy;
for ( int i= 0 ;i<accuracy;i++)
price[i]=min_price+i*step;
//--- определим точки для рисования "Уровней Фибоначчи" int d1=InpDate1*(bars- 1 )/ 100 ;
int d2=InpDate2*(bars- 1 )/ 100 ;
int p1=InpPrice1*(accuracy- 1 )/ 100 ;
int p2=InpPrice2*(accuracy- 1 )/ 100 ;
//--- создадим объект if (!FiboLevelsCreate( 0 ,InpName, 0 ,date[d1],price[p1],date[d2],price[p2],InpColor,
InpStyle,InpWidth,InpBack,InpSelection,InpRayRight,InpHidden,InpZOrder))
{
return ;
}
//--- перерисуем график и подождем 1 секунду ChartRedraw ();
Sleep ( 1000 );
//--- теперь будем перемещать точки привязки //--- счетчик цикла int v_steps=accuracy* 2 / 5 ;
//--- перемещаем первую точку привязки for ( int i= 0 ;i<v_steps;i++)
{
//--- возьмем следующее значение if (p1> 1 )
p1-= 1 ;
//--- сдвигаем точку if (!FiboLevelsPointChange( 0 ,InpName, 0 ,date[d1],price[p1]))
return ;
//--- проверим факт принудительного завершения скрипта if ( IsStopped ())
return ;
//--- перерисуем график ChartRedraw ();
}
//--- задержка в 1 секунду Sleep ( 1000 );
//--- счетчик цикла
v_steps=accuracy* 4 / 5 ;
//--- перемещаем вторую точку привязки for ( int i= 0 ;i<v_steps;i++)
{
//--- возьмем следующее значение if (p2> 1 )
p2-= 1 ;
//--- сдвигаем точку if (!FiboLevelsPointChange( 0 ,InpName, 1 ,date[d2],price[p2]))
return ;
//--- проверим факт принудительного завершения скрипта if ( IsStopped ())
return ;
//--- перерисуем график ChartRedraw ();
}
//--- задержка в 1 секунду Sleep ( 1000 );
//--- удалим объект с графика
FiboLevelsDelete( 0 ,InpName);
ChartRedraw ();
//--- задержка в 1 секунду Sleep ( 1000 );
//---
}
Lo entiendo. Por eso pregunto si la configuración de "Continuar objeto a la derecha" con OBJPROP_RAY_RIGHT realmente funciona en mt-4 para (OBJ_FIBO)? El script de ejemploestá tomado del tutorial de mt-4.
Es posible que se les haya pasado al editar la ayuda. Fue corregido desde la documentación de mql5.
Hola a todos. Hace una semana que empecé a estudiar mql y ahora estoy dándole vueltas a cómo implementar dicho mecanismo. El gráfico tiene un botón(OBJ_BUTTON), cómo y qué debe ser escrito en el código, de modo que al hacer clic en el botón se derivaría de una determinada secuencia de números en orden. Es decir, hay una secuencia de 2, 4, 8, 16, 32, 64, 128. Yo, por ejemplo, pulso el botón del gráfico y el número de esta secuencia debe aparecer en un comentario, estrictamente en orden. He pulsado el botón - mostrará 2, lo he vuelto a pulsar - mostrará 4 y así sucesivamente. Y al pulsar el segundo botón, por ejemplo, estos números aparecerían en orden inverso. Si puedes escribir un código que funcione, se acabará mi alegría)))
Ivan Revedzhuk: Hola a todos. Hace una semana que empecé a estudiar mql, y he estado dándole vueltas a cómo implementar dicho mecanismo. El gráfico tiene un botón (OBJ_BUTTON), cómo y qué se debe escribir en el código para imprimir un número de una secuencia determinada en orden cuando se hace clic en el botón. Es decir, hay una secuencia de 2, 4, 8, 16, 32, 64, 128. Yo, por ejemplo, pulso el botón del gráfico y el número de esta secuencia debe aparecer en un comentario, estrictamente en orden. He pulsado el botón - mostrará 2, lo he vuelto a pulsar - mostrará 4 y así sucesivamente. Y al pulsar el segundo botón, por ejemplo, estos números aparecerían en orden inverso. Si puedes escribir un código que funcione, se acabará mi alegría)))
if(ObjectGetInteger(0, "name", OBJPROP_STATE) == true)
// Кнопка нажата// Вывести в Comment какое нужно число
// Отжать кнопкуObjectSetInteger(0, "name", OBJPROP_STATE) == false
Para saber qué número hay en el comentario, lea la documentación sobre cómo trabajar con el horario. Hay una función para leer el comentario.
O lo más fácil, este número para poner en una variable estática, y ella en Comment()
Para determinar qué número está en el comentario, lea la documentación del gráfico. Hay una función para leer el comentario.
O la forma más fácil es meter este número en una variable estática y ponerlo en Comment()
Gracias por la respuesta. He encontrado cómo hacer el manejo de la pulsación de botones en la ayuda, pero estoy teniendo problemas con el resto. Estoy trabajando no sólo con un número, sino con una secuencia de enteros y necesito que con una pulsación del botón salga un número de esta secuencia, en orden del 2 al 128. La cuestión es cómo hacerlo exactamente...
@ Artyom Trishkin
Por favor, ¿puede responder a mi pregunta? No creo que a nadie le importe.
Intente hacer su pregunta aquí:
Hola.
Soy un novato y tengo el primer problema: ¿por qué la compilación da un error? ¿Cómo solucionarlo?
//+------------------------------------------------------------------+
//|moy var1.mq4 |
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#enlace de propiedad "https://www.mql5.com"
#versión de la propiedad "1.00"
#propiedad estricta
extern int Magia = 111;
int CuentaVenta()
//+------------------------------------------------------------------+
//|Función de inicialización de expertos|
//+-----------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función de desinicialización de expertos|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| función de tic experto|
//+------------------------------------------------------------------+
void OnTick()
{
{
int cuenta =0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
cuenta++;
}
}
volver;
}
}
//+------------------------------------------------------------------+
'int' - punto y coma esperado moy var1.mq4 13 1
1 error(es), 0 advertencia(s) 2 1
Hola.
Soy un novato y tengo el primer problema: ¿por qué la compilación da un error? ¿Cómo solucionarlo?
//+------------------------------------------------------------------+
Por favor, introduzca el código correctamente:
Por la tarde. No puedo dibujar un objeto Fibo (OBJ_FIBO) en MT-4 sin extender las líneas hacia la derecha. Al cambiar el parámetro OBJPROP_RAY_RIGHT, la semirrecta se sigue dibujando hacia la derecha. Y el script del tutorial se comporta de la misma manera. He intentado cambiarlo por OBJPROP_RAY en cuanto al segmento, no funciona. Si eres capaz de explicar la razón. Gracias de antemano.
El asunto es que MT4 no es MT5 y si el código compila, no significa que vaya a funcionar.
El hecho es que MT4 no es MT5, y si el código compila, esto no significa que funcionará.
Entiendo. Y es por eso que pregunto si la configuración " Continuación del objeto a la derecha" por medio de OBJPROP_RAY_RIGHT realmente funciona en MT-4 para ( OBJ_FIBO ) ? Se toma un ejemplo de un guión de un libro de texto para mt-4.
Lo entiendo. Por eso pregunto si la configuración de "Continuar objeto a la derecha" con OBJPROP_RAY_RIGHT realmente funciona en mt-4 para (OBJ_FIBO)? El script de ejemploestá tomado del tutorial de mt-4.
Es posible que se les haya pasado al editar la ayuda. Fue corregido desde la documentación de mql5.
Hola a todos. Hace una semana que empecé a estudiar mql, y he estado dándole vueltas a cómo implementar dicho mecanismo. El gráfico tiene un botón (OBJ_BUTTON), cómo y qué se debe escribir en el código para imprimir un número de una secuencia determinada en orden cuando se hace clic en el botón. Es decir, hay una secuencia de 2, 4, 8, 16, 32, 64, 128. Yo, por ejemplo, pulso el botón del gráfico y el número de esta secuencia debe aparecer en un comentario, estrictamente en orden. He pulsado el botón - mostrará 2, lo he vuelto a pulsar - mostrará 4 y así sucesivamente. Y al pulsar el segundo botón, por ejemplo, estos números aparecerían en orden inverso. Si puedes escribir un código que funcione, se acabará mi alegría)))
Para saber qué número hay en el comentario, lea la documentación sobre cómo trabajar con el horario. Hay una función para leer el comentario.
O lo más fácil, este número para poner en una variable estática, y ella en Comment()
Para determinar qué número está en el comentario, lea la documentación del gráfico. Hay una función para leer el comentario.
O la forma más fácil es meter este número en una variable estática y ponerlo en Comment()
Gracias por la respuesta. He encontrado cómo hacer el manejo de la pulsación de botones en la ayuda, pero estoy teniendo problemas con el resto. Estoy trabajando no sólo con un número, sino con una secuencia de enteros y necesito que con una pulsación del botón salga un número de esta secuencia, en orden del 2 al 128. La cuestión es cómo hacerlo exactamente...