안녕하세요. 이벤트 작동 방식을 이해합니다. 차트에서 개체 삭제 이벤트가 작동하지 않습니다( CHARTEVENT_OBJECT_DELETE ). 마우스와 개체 목록을 통해 모두 삭제되었습니다. 빌드 600.
무슨 일이야?
도움말의 코드를 사용합니다.
#define KEY_NUMPAD_5 12 #define KEY_LEFT 37 #define KEY_UP 38 #define KEY_RIGHT 39 #define KEY_DOWN 40 #define KEY_NUMLOCK_DOWN 98 #define KEY_NUMLOCK_LEFT 100 #define KEY_NUMLOCK_5 101 #define KEY_NUMLOCK_RIGHT 102 #define KEY_NUMLOCK_UP 104 //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ intOnInit() { //--- Print("Запущен эксперт с именем ",MQLInfoString(MQL_PROGRAM_NAME)); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| ChartEvent function | //+------------------------------------------------------------------+ voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа long constdouble& dparam, // параметр события типа double conststring& sparam) // параметр события типа string { //--- нажатие левой кнопкой мышки на графике if(id==CHARTEVENT_CLICK) { Print("Координаты щелчка мышки на графике: x = ",lparam," y = ",dparam); } //--- нажатие мышкой на графическом объекте if(id==CHARTEVENT_OBJECT_CLICK) { Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'"); } //--- нажатие кнопки на клавиатуре if(id==CHARTEVENT_KEYDOWN) { switch(int(lparam)) { case KEY_NUMLOCK_LEFT: Print("Нажата KEY_NUMLOCK_LEFT"); break; case KEY_LEFT: Print("Нажата KEY_LEFT"); break; case KEY_NUMLOCK_UP: Print("Нажата KEY_NUMLOCK_UP"); break; case KEY_UP: Print("Нажата KEY_UP"); break; case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT"); break; case KEY_RIGHT: Print("Нажата KEY_RIGHT"); break; case KEY_NUMLOCK_DOWN: Print("Нажата KEY_NUMLOCK_DOWN"); break; case KEY_DOWN: Print("Нажата KEY_DOWN"); break; case KEY_NUMPAD_5: Print("Нажата KEY_NUMPAD_5"); break; case KEY_NUMLOCK_5: Print("Нажата KEY_NUMLOCK_5"); break; default: Print("Нажата какая-то неперечисленная клавиша"); } ChartRedraw(); } //--- удален объект if(id==CHARTEVENT_OBJECT_DELETE) { Print("Удален объект с именем ",sparam); } //--- создан объект if(id==CHARTEVENT_OBJECT_CREATE) { Print("Создан объект с именем ",sparam); } //--- перемещен объект или изменены координаты точек привязки if(id==CHARTEVENT_OBJECT_DRAG) { Print("Изменение точек привязки объекта с именем ",sparam); } //--- изменен текст в поле ввода графического объекта Edit if(id==CHARTEVENT_OBJECT_ENDEDIT) { Print("Изменен текст в объекте Edit ",sparam); } }
포럼 회원 여러분, 이해를 도와주세요. 나는 현재 양초입니다. 왜 i-2는 선을 긋고 싶지 않고 테스터는 실행 중에 멈춥니다.
i 번째에서 더 일찍 2개의 양초를 만들려는 경우 빼기가 아니라 2를 더해야 합니다. 왜냐하면 양초는 오른쪽에서 왼쪽으로 번호가 매겨지며 0은 현재 막대입니다. 아직 존재하지 않는(-2) 막대에 선을 그리려는 경우 배열 인덱스 는 음수가 될 수 없습니다. 이렇게 하려면 원하는 막대의 시간을 계산해야 합니다. 예를 들어 다음과 같이 Time[0]+2*(Time[0]-Time[1])
i 번째에서 2 초 더 일찍 선을 그리려는 경우 빼기가 아니라 2를 더해야합니다. 왜냐하면 양초는 오른쪽에서 왼쪽으로 번호가 매겨지며 0은 현재 막대입니다. 아직 존재하지 않는(-2) 막대에 선을 그리려는 경우 배열 인덱스는 음수가 될 수 없습니다. 이렇게 하려면 원하는 막대의 시간을 계산해야 합니다. 예를 들어 다음과 같이 Time[0]+2*(Time[0]-Time[1])
사람들은 마틴을 사용하는 로봇이라고 말합니다.
예를 들어 주문을 열면 로봇이 계속 작동합니다...
사람들은 마틴을 사용하는 로봇이라고 말합니다.
예를 들어 주문을 열면 로봇이 계속 작동합니다...
안녕하세요. 이벤트 작동 방식을 이해합니다. 차트에서 개체 삭제 이벤트가 작동하지 않습니다( CHARTEVENT_OBJECT_DELETE ). 마우스와 개체 목록을 통해 모두 삭제되었습니다. 빌드 600.
무슨 일이야?
도움말의 코드를 사용합니다.
#define KEY_NUMPAD_5 12
#define KEY_LEFT 37
#define KEY_UP 38
#define KEY_RIGHT 39
#define KEY_DOWN 40
#define KEY_NUMLOCK_DOWN 98
#define KEY_NUMLOCK_LEFT 100
#define KEY_NUMLOCK_5 101
#define KEY_NUMLOCK_RIGHT 102
#define KEY_NUMLOCK_UP 104
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//---
Print ( "Запущен эксперт с именем " , MQLInfoString ( MQL_PROGRAM_NAME ));
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, // идентификатор события
const long & lparam, // параметр события типа long
const double & dparam, // параметр события типа double
const string & sparam) // параметр события типа string
{
//--- нажатие левой кнопкой мышки на графике
if (id== CHARTEVENT_CLICK )
{
Print ( "Координаты щелчка мышки на графике: x = " ,lparam, " y = " ,dparam);
}
//--- нажатие мышкой на графическом объекте
if (id== CHARTEVENT_OBJECT_CLICK )
{
Print ( "Нажатие кнопки мышки на объекте с именем '" +sparam+ "'" );
}
//--- нажатие кнопки на клавиатуре
if (id== CHARTEVENT_KEYDOWN )
{
switch ( int( lparam))
{
case KEY_NUMLOCK_LEFT: Print ( "Нажата KEY_NUMLOCK_LEFT" ); break ;
case KEY_LEFT: Print ( "Нажата KEY_LEFT" ); break ;
case KEY_NUMLOCK_UP: Print ( "Нажата KEY_NUMLOCK_UP" ); break ;
case KEY_UP: Print ( "Нажата KEY_UP" ); break ;
case KEY_NUMLOCK_RIGHT: Print ( "Нажата KEY_NUMLOCK_RIGHT" ); break ;
case KEY_RIGHT: Print ( "Нажата KEY_RIGHT" ); break ;
case KEY_NUMLOCK_DOWN: Print ( "Нажата KEY_NUMLOCK_DOWN" ); break ;
case KEY_DOWN: Print ( "Нажата KEY_DOWN" ); break ;
case KEY_NUMPAD_5: Print ( "Нажата KEY_NUMPAD_5" ); break ;
case KEY_NUMLOCK_5: Print ( "Нажата KEY_NUMLOCK_5" ); break ;
default : Print ( "Нажата какая-то неперечисленная клавиша" );
}
ChartRedraw ();
}
//--- удален объект
if (id== CHARTEVENT_OBJECT_DELETE )
{
Print ( "Удален объект с именем " ,sparam);
}
//--- создан объект
if (id== CHARTEVENT_OBJECT_CREATE )
{
Print ( "Создан объект с именем " ,sparam);
}
//--- перемещен объект или изменены координаты точек привязки
if (id== CHARTEVENT_OBJECT_DRAG )
{
Print ( "Изменение точек привязки объекта с именем " ,sparam);
}
//--- изменен текст в поле ввода графического объекта Edit
if (id== CHARTEVENT_OBJECT_ENDEDIT )
{
Print ( "Изменен текст в объекте Edit " ,sparam);
}
}
포럼 회원 여러분, 이해를 도와주세요. 나는 현재 양초입니다. 왜 i-2가 선을 긋고 싶지 않은지, 테스터는 실행 중에 멈춥니다.
포럼 회원 여러분, 이해를 도와주세요. 나는 현재 양초입니다. 왜 i-2는 선을 긋고 싶지 않고 테스터는 실행 중에 멈춥니다.
i 번째에서 더 일찍 2개의 양초를 만들려는 경우 빼기가 아니라 2를 더해야 합니다. 왜냐하면 양초는 오른쪽에서 왼쪽으로 번호가 매겨지며 0은 현재 막대입니다.
아직 존재하지 않는(-2) 막대에 선을 그리려는 경우 배열 인덱스 는 음수가 될 수 없습니다. 이렇게 하려면 원하는 막대의 시간을 계산해야 합니다. 예를 들어 다음과 같이 Time[0]+2*(Time[0]-Time[1])
i 번째에서 2 초 더 일찍 선을 그리려는 경우 빼기가 아니라 2를 더해야합니다. 왜냐하면 양초는 오른쪽에서 왼쪽으로 번호가 매겨지며 0은 현재 막대입니다.
아직 존재하지 않는(-2) 막대에 선을 그리려는 경우 배열 인덱스는 음수가 될 수 없습니다. 이렇게 하려면 원하는 막대의 시간을 계산해야 합니다. 예를 들어 다음과 같이 Time[0]+2*(Time[0]-Time[1])
정말 감사합니다 존재하지 않는 막대에 선을 그어야 했습니다 (-2)
정말 감사합니다 존재하지 않는 막대에 선을 그어야 했습니다 (-2)
가격이 있는 이유. 결국, 객체는 제 시간에 만들어집니다.
정말 감사합니다 존재하지 않는 막대에 선을 그어야 했습니다 (-2)
물론이죠
여기 또 다른 "아름다운" 솔루션이 있습니다.
Time[0]+Period()*60*2 //60 переводим в секунды, 2 кол-во баров
여러분, 시작하도록 도와주세요. 주문을 열어야 합니다.
input int TakeProfit = 30;
input double StartLot = 0.01;
input double summ=false; //true, открываем позиции в обе стороны
input int Slippage = 30; // установим значение проскальзывания
void OnTick()
{
if(summ) { // открываем однупозицию, покупка.
OrderSend(
Symbol(),
OP_BUY,
StartLot,
NormalizeDouble(NormalizeDouble(Ask,_Digits),_Digits),
Slippage,
0,
TakeProfit,
WindowExpertName()+" "+(string)0,
0,
0,
clrBlue
);
}else{
OrderSend(
Symbol(),
OP_BUY,
StartLot,
NormalizeDouble(NormalizeDouble(Ask,_Digits),_Digits),
Slippage,
0,
TakeProfit,
WindowExpertName()+" "+(string)0,
0,
0,
clrBlue
);
OrderSend(
Symbol(),
OP_SELL,
StartLot,
NormalizeDouble(NormalizeDouble(Bid,_Digits),_Digits),
Slippage,
0,
TakeProfit,
WindowExpertName()+" "+(string)0,
0,
0,
clrBlue
);
}
}
작동하지 않습니다, 무엇이 잘못되었나요?
단순히 위치를 여는 코드를 작성하십시오. 그게 다야...
여러분, 시작하도록 도와주세요. 주문을 열어야 합니다.
작동하지 않습니다, 무엇이 잘못되었나요?
단순히 포지션을 여는 코드를 작성하십시오. 그게 다야...
주문을 제출할 때 TakeProfit이 잘못 지정되었습니다. 이익 nanopips의 수가 아니라 가격을 지정해야 합니다. Ask+TakeProfit*Point()로 수정
묻고, 입찰가를 정규화할 필요가 없습니다....
OrderSend(
Symbol(),
OP_BUY,
StartLot,
Ask,
Slippage,
0,
Ask+TakeProfit*Point(),
WindowExpertName()+" "+(string)0,
0,
0,
clrBlue
);