포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 509

 

사람들은 마틴을 사용하는 로봇이라고 말합니다.

예를 들어 주문을 열면 로봇이 계속 작동합니다...

 
Zolotai :

사람들은 마틴을 사용하는 로봇이라고 말합니다.

예를 들어 주문을 열면 로봇이 계속 작동합니다...

코드 베이스
 

안녕하세요. 이벤트 작동 방식을 이해합니다. 차트에서 개체 삭제 이벤트가 작동하지 않습니다( 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가 선을 긋고 싶지 않은지, 테스터는 실행 중에 멈춥니다.

 ObjectCreate ( "line" , OBJ_VLINE , 0 , Time [i-2], Open [ 1 ]);
 
Alexandr24 :

포럼 회원 여러분, 이해를 도와주세요. 나는 현재 양초입니다. 왜 i-2는 선을 긋고 싶지 않고 테스터는 실행 중에 멈춥니다.


i 번째에서 더 일찍 2개의 양초를 만들려는 경우 빼기가 아니라 2를 더해야 합니다. 왜냐하면 양초는 오른쪽에서 왼쪽으로 번호가 매겨지며 0은 현재 막대입니다.
아직 존재하지 않는(-2) 막대에 선을 그리려는 경우 배열 인덱스 는 음수가 될 수 없습니다. 이렇게 하려면 원하는 막대의 시간을 계산해야 합니다. 예를 들어 다음과 같이 Time[0]+2*(Time[0]-Time[1])
 
isn-88 :

i 번째에서 2 초 더 일찍 선을 그리려는 경우 빼기가 아니라 2를 더해야합니다. 왜냐하면 양초는 오른쪽에서 왼쪽으로 번호가 매겨지며 0은 현재 막대입니다.
아직 존재하지 않는(-2) 막대에 선을 그리려는 경우 배열 인덱스는 음수가 될 수 없습니다. 이렇게 하려면 원하는 막대의 시간을 계산해야 합니다. 예를 들어 다음과 같이 Time[0]+2*(Time[0]-Time[1])

정말 감사합니다 존재하지 않는 막대에 선을 그어야 했습니다 (-2)
 
Alexandr24 :

정말 감사합니다 존재하지 않는 막대에 선을 그어야 했습니다 (-2)

가격이 있는 이유. 결국, 객체는 제 시간에 만들어집니다.
 
Alexandr24 :

정말 감사합니다 존재하지 않는 막대에 선을 그어야 했습니다 (-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

);

}

}

작동하지 않습니다, 무엇이 잘못되었나요?

단순히 위치를 여는 코드를 작성하십시오. 그게 다야...

 
Zolotai :

여러분, 시작하도록 도와주세요. 주문을 열어야 합니다.

작동하지 않습니다, 무엇이 잘못되었나요?

단순히 포지션을 여는 코드를 작성하십시오. 그게 다야...


주문을 제출할 때 TakeProfit이 잘못 지정되었습니다. 이익 nanopips의 수가 아니라 가격을 지정해야 합니다. Ask+TakeProfit*Point()로 수정
묻고, 입찰가를 정규화할 필요가 없습니다....

OrderSend(

Symbol(),

OP_BUY,

StartLot,

Ask,

Slippage,

0,

Ask+TakeProfit*Point(),

WindowExpertName()+" "+(string)0,

0,

0,

clrBlue

);

사유: