Je suis un débutant et j'ai le premier problème - pourquoi la compilation donne-t-elle une erreur ? Comment le réparer ?
//+------------------------------------------------------------------+ //|moy var1.mq4 | #property copyright "Copyright 2019, MetaQuotes Software Corp." #lien de propriété "https://www.mql5.com" #propriété version "1.00" #propriété stricte
extern int Magic = 111 ; int CountSell() //+------------------------------------------------------------------+ //|Fonction d' initialisation de l'expert| //+-----------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED) ; } //+------------------------------------------------------------------+ //| Fonction de désinitialisation des experts| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| fonction tick expert| //+------------------------------------------------------------------+ void OnTick() { { int count =0 ;
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Хочу собрать ПК для работы с МТ 5, что посоветуете и...
Après-midi. Je ne peux pas dessiner un objet Fibo(OBJ_FIBO) dans MT-4 sans étendre les lignes vers la droite. Lorsque vous modifiez le paramètre OBJPROP_RAY_RIGHT, le rayon est toujours dessiné vers la droite. Et le script du tutoriel se comporte de la même manière. J'ai essayé de le changer en OBJPROP_RAY comme pour le segment, cela ne fonctionne pas. Si vous êtes en mesure d'expliquer la raison. Merci d'avance.
Sergey Fionin: Après-midi. Je ne peux pas dessiner un objet Fibo (OBJ_FIBO) dans MT-4 sans étendre les lignes vers la droite. Lorsque vous modifiez le paramètre OBJPROP_RAY_RIGHT, le rayon est toujours dessiné vers la droite. Et le script du tutoriel se comporte de la même manière. J'ai essayé de le changer en OBJPROP_RAY comme pour le segment, cela ne fonctionne pas. Si vous êtes en mesure d'expliquer la raison. Merci d'avance.
Le problème est que MT4 n'est pas MT5 et que si le code se compile, cela ne signifie pas qu'il fonctionnera.
Le fait est que MT4 n'est pas MT5, et si le code compile, cela ne signifie pas qu'il fonctionnera.
Je comprends. Et c'est pourquoi je demande si le réglage " Poursuite de l'objet vers la droite" au moyen de OBJPROP_RAY_RIGHT fonctionne vraiment dans MT-4 pour ( OBJ_FIBO ) ? Un exemple de scriptest tiré d'un manuel pour 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 );
//---
}
Je comprends. C'est pourquoi je demande si le réglage "Continuer l'objet vers la droite" avec OBJPROP_RAY_RIGHT fonctionne vraiment dans mt-4 pour (OBJ_FIBO)? Le script d'exempleest tiré du tutoriel pour mt-4.
Il est possible qu'ils l'aient manqué lors de l'édition de l'aide. Il a été corrigé à partir de la documentation de mql5.
Bonjour à tous. Cela fait une semaine que j'ai commencé à étudier mql et je me demande maintenant comment mettre en œuvre un tel mécanisme. Le graphique a un bouton(OBJ_BUTTON), comment et quoi doit être écrit dans le code, de sorte que lorsque vous cliquez sur le bouton serait dérivé d'une séquence donnée de chiffres dans l'ordre. C'est-à-dire qu'il existe une séquence de 2, 4, 8, 16, 32, 64, 128. J'appuie, par exemple, sur le bouton du graphique et le numéro de cette séquence doit s'afficher dans un commentaire, strictement dans l'ordre. J'ai appuyé sur le bouton - il affiche 2, j'ai appuyé à nouveau - il affiche 4 et ainsi de suite. Et en appuyant sur le deuxième bouton, par exemple, ces chiffres apparaîtraient dans l'ordre inverse. Si vous pouvez écrire un code fonctionnel, ma joie sera terminée))))
Ivan Revedzhuk: Bonjour à tous. Cela fait une semaine que j'ai commencé à étudier mql, et je me suis demandé comment mettre en œuvre un tel mécanisme. Le graphique a un bouton (OBJ_BUTTON), comment et quoi écrire dans le code pour imprimer un nombre à partir d'une séquence donnée dans l'ordre lorsque vous cliquez sur le bouton. C'est-à-dire qu'il existe une séquence de 2, 4, 8, 16, 32, 64, 128. J'appuie, par exemple, sur le bouton du graphique et le numéro de cette séquence doit s'afficher dans un commentaire, strictement dans l'ordre. J'ai appuyé sur le bouton - il affiche 2, j'ai appuyé à nouveau - il affiche 4 et ainsi de suite. Et en appuyant sur le deuxième bouton, par exemple, ces chiffres apparaîtraient dans l'ordre inverse. Si vous pouvez écrire un code fonctionnel, ma joie sera terminée))))
if(ObjectGetInteger(0, "name", OBJPROP_STATE) == true)
// Кнопка нажата// Вывести в Comment какое нужно число
// Отжать кнопкуObjectSetInteger(0, "name", OBJPROP_STATE) == false
Pour déterminer le numéro du commentaire, lisez la documentation du graphique. Il existe une fonction permettant de lire le commentaire.
Ou le plus simple, ce nombre à mettre dans une variable statique, et ce dans Comment()
Pour déterminer le numéro du commentaire, lisez la documentation du graphique. Il existe une fonction permettant de lire le commentaire.
Ou la manière la plus simple est de mettre ce nombre dans une variable statique et de le mettre dans Comment()
Merci pour la réponse. J'ai trouvé comment gérer les pressions sur les boutons dans l'aide, mais j'ai des problèmes avec le reste. Je ne travaille pas seulement avec un nombre, mais avec une séquence d'entiers et j'ai besoin d'une pression sur le bouton pour sortir un nombre de cette séquence, dans l'ordre de 2 à 128. La question est de savoir comment faire exactement...
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
@ Artyom Trishkin
Pouvez-vous répondre à ma question ? Je pense que tout le monde s'en moque.
Essayez de poser votre question ici :
Bonjour.
Je suis un débutant et j'ai le premier problème - pourquoi la compilation donne-t-elle une erreur ? Comment le réparer ?
//+------------------------------------------------------------------+
//|moy var1.mq4 |
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#lien de propriété "https://www.mql5.com"
#propriété version "1.00"
#propriété stricte
extern int Magic = 111 ;
int CountSell()
//+------------------------------------------------------------------+
//|Fonction d' initialisation de l'expert|
//+-----------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED) ;
}
//+------------------------------------------------------------------+
//| Fonction de désinitialisation des experts|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| fonction tick expert|
//+------------------------------------------------------------------+
void OnTick()
{
{
int count =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)
compte++ ;
}
}
retour ;
}
}
//+------------------------------------------------------------------+
'int' - point-virgule attendu moy var1.mq4 13 1
1 erreur(s), 0 avertissement(s) 2 1
Bonjour.
Je suis un débutant et j'ai le premier problème - pourquoi la compilation donne-t-elle une erreur ? Comment le réparer ?
//+------------------------------------------------------------------+
Veuillez insérer le code correctement :
Après-midi. Je ne peux pas dessiner un objet Fibo (OBJ_FIBO) dans MT-4 sans étendre les lignes vers la droite. Lorsque vous modifiez le paramètre OBJPROP_RAY_RIGHT, le rayon est toujours dessiné vers la droite. Et le script du tutoriel se comporte de la même manière. J'ai essayé de le changer en OBJPROP_RAY comme pour le segment, cela ne fonctionne pas. Si vous êtes en mesure d'expliquer la raison. Merci d'avance.
Le problème est que MT4 n'est pas MT5 et que si le code se compile, cela ne signifie pas qu'il fonctionnera.
Le fait est que MT4 n'est pas MT5, et si le code compile, cela ne signifie pas qu'il fonctionnera.
Je comprends. Et c'est pourquoi je demande si le réglage " Poursuite de l'objet vers la droite" au moyen de OBJPROP_RAY_RIGHT fonctionne vraiment dans MT-4 pour ( OBJ_FIBO ) ? Un exemple de script est tiré d'un manuel pour mt-4.
Je comprends. C'est pourquoi je demande si le réglage "Continuer l'objet vers la droite" avec OBJPROP_RAY_RIGHT fonctionne vraiment dans mt-4 pour (OBJ_FIBO)? Le script d'exempleest tiré du tutoriel pour mt-4.
Il est possible qu'ils l'aient manqué lors de l'édition de l'aide. Il a été corrigé à partir de la documentation de mql5.
Bonjour à tous. Cela fait une semaine que j'ai commencé à étudier mql, et je me suis demandé comment mettre en œuvre un tel mécanisme. Le graphique a un bouton (OBJ_BUTTON), comment et quoi écrire dans le code pour imprimer un nombre à partir d'une séquence donnée dans l'ordre lorsque vous cliquez sur le bouton. C'est-à-dire qu'il existe une séquence de 2, 4, 8, 16, 32, 64, 128. J'appuie, par exemple, sur le bouton du graphique et le numéro de cette séquence doit s'afficher dans un commentaire, strictement dans l'ordre. J'ai appuyé sur le bouton - il affiche 2, j'ai appuyé à nouveau - il affiche 4 et ainsi de suite. Et en appuyant sur le deuxième bouton, par exemple, ces chiffres apparaîtraient dans l'ordre inverse. Si vous pouvez écrire un code fonctionnel, ma joie sera terminée))))
Pour déterminer le numéro du commentaire, lisez la documentation du graphique. Il existe une fonction permettant de lire le commentaire.
Ou le plus simple, ce nombre à mettre dans une variable statique, et ce dans Comment()
Pour déterminer le numéro du commentaire, lisez la documentation du graphique. Il existe une fonction permettant de lire le commentaire.
Ou la manière la plus simple est de mettre ce nombre dans une variable statique et de le mettre dans Comment()
Merci pour la réponse. J'ai trouvé comment gérer les pressions sur les boutons dans l'aide, mais j'ai des problèmes avec le reste. Je ne travaille pas seulement avec un nombre, mais avec une séquence d'entiers et j'ai besoin d'une pression sur le bouton pour sortir un nombre de cette séquence, dans l'ordre de 2 à 128. La question est de savoir comment faire exactement...