저는 초보자이고 첫 번째 문제는 컴파일에서 오류가 발생하는 이유입니다. 어떻게 고치는 지?
//+----------------------------------------------- --------------------+ //| 내 var1.mq4 | #property copyright "Copyright 2019, MetaQuotes Software Corp." #속성 링크 "https://www.mql5.com" #속성 버전 "1.00" #속성엄격
외부 int 매직 = 111; 정수 CountSell() //+----------------------------------------------- --------------------+ //| 전문가 초기화 기능 | //+----------------------------------------------- ------------------+ int OnInit() { 반환(INIT_SUCCESSED); } //+----------------------------------------------- --------------------+ //| 전문적인 초기화 해제 기능 | //+----------------------------------------------- --------------------+ 무효 OnDeinit(const int 이유) { } //+----------------------------------------------- --------------------+ //| 전문가 틱 기능 | //+----------------------------------------------- --------------------+ 무효 OnTick() { { 정수 = 0;
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Хочу собрать ПК для работы с МТ 5, что посоветуете и...
안녕하세요. 라인을 오른쪽으로 확장하지 않고는 mt-4에서 fibo 객체( OBJ_FIBO )를 그릴 수 없습니다. OBJPROP_RAY_RIGHT 매개변수를 변경해도 광선은 계속 오른쪽으로 그려집니다. 또한 교과서의 교육 스크립트도 같은 방식으로 작동합니다. 세그먼트에 대해 OBJPROP_RAY로 대체하려고 시도했지만 도움이되지 않습니다. 무슨 일이 일어나고 있는지 설명 할 수 있다면. 미리 감사드립니다.
Sergey Fionin : 안녕하세요. 라인을 오른쪽으로 확장하지 않고는 mt-4에서 fibo 객체( OBJ_FIBO )를 그릴 수 없습니다. OBJPROP_RAY_RIGHT 매개변수를 변경해도 광선은 계속 오른쪽으로 그려집니다. 또한 교과서의 교육 스크립트도 같은 방식으로 작동합니다. 세그먼트에 대해 OBJPROP_RAY로 대체하려고 시도했지만 도움이되지 않습니다. 무슨 일이 일어나고 있는지 설명 할 수 있다면. 미리 감사드립니다.
이해합니다. 그리고 그것이 OBJPROP_RAY_RIGHT를 통해 "객체를 오른쪽으로 계속 " 설정이 MT-4에서 ( OBJ_FIBO )에 대해 실제로 작동하는지 묻는 이유입니다 . 스크립트의 예는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 );
//---
}
안녕하세요. 나는 일주일 동안 mql 언어를 배우기 시작했고 이제 그러한 메커니즘을 구현하는 방법에 대해 머리를 맞대고 있습니다. 차트에는 버튼( OBJ_BUTTON )이 있으며, 버튼을 눌렀을 때 주어진 시퀀스의 숫자가 순서대로 표시되도록 코드에 어떻게 그리고 무엇을 작성해야 하는지입니다. 저것들. 일련의 숫자 2,4,8,16,32,64,128이 있습니다. 예를 들어 차트의 버튼을 클릭하면 이 시퀀스의 숫자가 순서대로 주석으로 화면에 표시되어야 합니다. 버튼을 눌렀습니다 - 2가 나타났고, 다른 것을 눌렀습니다 - 4가 나타났습니다. 예를 들어 두 번째 버튼을 클릭하면 이 숫자가 역순으로 나타납니다. 작동하는 코드를 작성할 수 있다면 내 기쁨은 끝나지 않을 것입니다)))
Ivan Revedzhuk : 안녕하세요. 나는 일주일 동안 mql 언어를 배우기 시작했고 이제 그러한 메커니즘을 구현하는 방법에 대해 머리를 맞대고 있습니다. 차트에는 버튼( OBJ_BUTTON )이 있으며, 버튼을 눌렀을 때 주어진 시퀀스의 숫자가 순서대로 표시되도록 코드에 어떻게 그리고 무엇을 작성해야 하는지입니다. 저것들. 일련의 숫자 2,4,8,16,32,64,128이 있습니다. 예를 들어 차트의 버튼을 클릭하면 이 시퀀스의 숫자가 순서대로 주석의 화면에 표시되어야 합니다. 버튼을 눌렀습니다 - 2가 나타났고, 다른 것을 눌렀습니다 - 4가 나타났습니다. 예를 들어 두 번째 버튼을 클릭하면 이 숫자가 역순으로 나타납니다. 작동하는 코드를 작성할 수 있다면 내 기쁨은 끝나지 않을 것입니다)))
if ( ObjectGetInteger ( 0 , "name" , OBJPROP_STATE ) == true )
// Кнопка нажата// Вывести в Comment какое нужно число
// Отжать кнопкуObjectSetInteger ( 0 , "name " , OBJPROP_STATE ) == false
주석에서 현재 숫자가 무엇인지 확인하려면 차트 작업에 대한 설명서를 읽으십시오. 댓글을 읽는 기능이 있습니다.
주석에서 현재 숫자가 무엇인지 확인하려면 차트 작업에 대한 설명서를 읽으십시오. 댓글을 읽는 기능이 있습니다.
또는 가장 간단한 방법으로 이 숫자를 정적 변수에 넣고 Comment()에 넣습니다.
당신의 답변에 감사드립니다. 도움말에서 버튼 누름을 처리하는 방법을 찾았지만 나머지 어려움이 있습니다. 작업은 하나의 숫자가 아니라 일련의 정수로 이루어지며 이 순서의 숫자를 2에서 128까지 순서대로 표시하려면 버튼을 한 번만 눌러야 합니다. 문제는 정확히 어떻게 하느냐 입니다...
@ Artyom 트리슈킨
제 질문에 답변해 주시겠습니까? 아무도 신경쓰지 않는다고 생각합니다.
여기에서 질문해 보세요.
안녕하세요.
저는 초보자이고 첫 번째 문제는 컴파일에서 오류가 발생하는 이유입니다. 어떻게 고치는 지?
//+----------------------------------------------- --------------------+
//| 내 var1.mq4 |
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#속성 링크 "https://www.mql5.com"
#속성 버전 "1.00"
#속성엄격
외부 int 매직 = 111;
정수 CountSell()
//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- ------------------+
int OnInit()
{
반환(INIT_SUCCESSED);
}
//+----------------------------------------------- --------------------+
//| 전문적인 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
무효 OnDeinit(const int 이유)
{
}
//+----------------------------------------------- --------------------+
//| 전문가 틱 기능 |
//+----------------------------------------------- --------------------+
무효 OnTick()
{
{
정수 = 0;
for(int i = OrdersTotal() - 1, i >= 0, i--)
{
if(주문선택(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
카운트++;
}
}
반품;
}
}
//+----------------------------------------------- --------------------+
'int' - 내 var1.mq4 13 1에 세미콜론이 필요합니다.
오류 1개, 경고 0개 2 1
안녕하세요.
저는 초보자이고 첫 번째 문제는 컴파일에서 오류가 발생하는 이유입니다. 어떻게 고치는 지?
//+----------------------------------------------- --------------------+
코드를 올바르게 붙여넣으십시오.
안녕하세요. 라인을 오른쪽으로 확장하지 않고는 mt-4에서 fibo 객체( OBJ_FIBO )를 그릴 수 없습니다. OBJPROP_RAY_RIGHT 매개변수를 변경해도 광선은 계속 오른쪽으로 그려집니다. 또한 교과서의 교육 스크립트도 같은 방식으로 작동합니다. 세그먼트에 대해 OBJPROP_RAY로 대체하려고 시도했지만 도움이되지 않습니다. 무슨 일이 일어나고 있는지 설명 할 수 있다면. 미리 감사드립니다.
사실 MT4는 MT5가 아니며 코드가 컴파일된다고 해서 작동한다는 의미는 아닙니다.
사실 MT4는 MT5가 아니며 코드가 컴파일된다고 해서 작동한다는 의미는 아닙니다.
이해합니다. 그리고 그것이 OBJPROP_RAY_RIGHT를 통해 "객체를 오른쪽으로 계속 " 설정이 MT-4에서 ( OBJ_FIBO )에 대해 실제로 작동하는지 묻는 이유입니다 . 스크립트의 예는 mt-4에 대한 교과서에서 가져옵니다.
이해합니다. 그리고 그것이 OBJPROP_RAY_RIGHT를 통해 "객체를 오른쪽으로 계속 " 설정이 MT-4에서 ( OBJ_FIBO )에 대해 실제로 작동하는지 묻는 이유입니다 . 스크립트의 예는 mt-4에 대한 교과서에서 가져옵니다.
도움말을 편집할 때 누락되었을 수 있습니다. 결국, 그것은 mql5 문서에서 지배되었습니다.
안녕하세요. 나는 일주일 동안 mql 언어를 배우기 시작했고 이제 그러한 메커니즘을 구현하는 방법에 대해 머리를 맞대고 있습니다. 차트에는 버튼( OBJ_BUTTON )이 있으며, 버튼을 눌렀을 때 주어진 시퀀스의 숫자가 순서대로 표시되도록 코드에 어떻게 그리고 무엇을 작성해야 하는지입니다. 저것들. 일련의 숫자 2,4,8,16,32,64,128이 있습니다. 예를 들어 차트의 버튼을 클릭하면 이 시퀀스의 숫자가 순서대로 주석의 화면에 표시되어야 합니다. 버튼을 눌렀습니다 - 2가 나타났고, 다른 것을 눌렀습니다 - 4가 나타났습니다. 예를 들어 두 번째 버튼을 클릭하면 이 숫자가 역순으로 나타납니다. 작동하는 코드를 작성할 수 있다면 내 기쁨은 끝나지 않을 것입니다)))
주석에서 현재 숫자가 무엇인지 확인하려면 차트 작업에 대한 설명서를 읽으십시오. 댓글을 읽는 기능이 있습니다.
또는 가장 간단한 방법으로 이 숫자를 정적 변수에 넣고 Comment()에 넣습니다.
주석에서 현재 숫자가 무엇인지 확인하려면 차트 작업에 대한 설명서를 읽으십시오. 댓글을 읽는 기능이 있습니다.
또는 가장 간단한 방법으로 이 숫자를 정적 변수에 넣고 Comment()에 넣습니다.
당신의 답변에 감사드립니다. 도움말에서 버튼 누름을 처리하는 방법을 찾았지만 나머지 어려움이 있습니다. 작업은 하나의 숫자가 아니라 일련의 정수로 이루어지며 이 순서의 숫자를 2에서 128까지 순서대로 표시하려면 버튼을 한 번만 눌러야 합니다. 문제는 정확히 어떻게 하느냐 입니다...