여러 날 동안 작동하는 복잡한 논리가 있지만 한 순간에 멈춥니다. 그러나 이것은 때때로 소스 코드를 편집할 수 없는 EX5에서 발생합니다. 지표나 어드바이저가 정지된 측면에서 프로그래밍 방식으로 결정할 수 있습니까? 이 지표 또는 저 지표의 계산된 부분에 대한 통계를 수집하시겠습니까?
지표를 사용하면 일시 중단된 상태에서 기호로 차트 업데이트를 종료하기 때문에 가능한 것 같습니다. 이것은 어떤 지표가 정지를 일으켰는지 지정하지 않은 경우에도 Expert Advisor에 의해 추적될 수 있습니다.
금지 기록을 세웠다. 금지 기간 동안 그들은 포럼에서 나에게 대답하지만 나는 읽을 수만 있습니다. 그리고 다음 금지 조치가 해제된 후 계속하기 위해 누가, 어디서 응답했는지 기억하기가 매우 어렵습니다. 어떻게 든이 문제를 해결할 수 있습니까 (더 이상 목욕에 들어가지 않는 것이 좋습니다)? 그리고 일반적으로 가끔 읽지만 지금은 답할 시간이 없습니다. "나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
comp : 금지 기록을 세웠다. 금지 기간 동안 포럼에서 답변을 해주지만 읽을 수만 있습니다. 그리고 다음 금지 조치가 해제된 후 계속하기 위해 누가, 어디서 응답했는지 기억하기가 매우 어렵습니다. 어떻게 든이 문제를 해결할 수 있습니까 (더 이상 목욕에 들어가지 않는 것이 좋습니다)? 그리고 일반적으로 가끔 읽지만 지금은 답할 시간이 없습니다. "나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
먼저 생각한 다음 실행해야 합니다. 그리고 그 반대도 마찬가지입니다. 그러면 메모리에 문제가 없을 것입니다.
지정가 주문을 한 로봇은 오픈 포지션을 닫을 때(스탑이든 이익이든 상관없이) 나머지 보류를 제거해야 합니다. 위치. 저것. 삭제 트리거는 정확히 포지션을 닫는 이벤트여야 합니다. 저에게 이 경우 이 포지션이 어떻게 청산되었는지는 중요하지 않습니다(청산이 SL에 있는 경우 삭제해야 할 한도가 남아 있지 않다는 조건만 적용됩니다). 그러나 자세히 설명하고 모든 것을 올바르게 수행하면 트리거는 TP입니다.
로봇은 지연을 제거하지만 위치가 닫힌 후가 아니라 배치된 직후에 제거하는 것으로 나타났습니다. 그리고 그는 계속해서 보류 주문을 걸고 삭제 하면서 자신과 싸우기 시작합니다. 무엇이 잘못되었는지 보십시오.
inputdouble lot = 0.2 ;
inputdouble TakeProfitPips = 50 ;
inputdouble StopLossPips = 200 ;
int bar= 0 ;
int shift= 1 ;
int tiket;
int otkt;
double price;
int cnt;
double TPp,SLp;
int tkt;
int n;
int type;
int _OrdersTotal = 0 ;
// кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),// состоянием на текущий тикint now_OrdersTotal = 0 ;
// кол-во позиций, соответствующих критериям (текущий инструмент и заданный MagicNumber),// состоянием на предыдущий тикstaticint pre_OrdersTotal = 0 ;
// массив открытых позиций состоянием на текущий тикint now_OrdersArray[][ 2 ]; // [№ в списке][№ тикета, тип позиции]// текущий номер позиции в массиве now_OrdersArray (для перебора)int now_CurOrder = 0 ;
// текущий номер позиции в массиве pre_OrdersArray (для перебора)int pre_CurOrder = 0 ;
// массив для хранения количества закрытых позиций каждого типаint now_ClosedOrdersArray[ 6 ][ 3 ]; // [тип ордера][тип закрытия] // временные флагиbool OrderClosed = true , PendingOrderOpened = false ;
// временные переменныеint pre_OrdersArray[][ 2 ]; // [количество позиций][№ тикета, тип позиции]//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit ()
{
//---//---return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit ( constint reason)
{
//---
}
voidOnTick ()
{
if ( OrdersTotal ()== 0 && iTime ( Symbol (), PERIOD_M1 , 1 )== D'14.01.16 16:30' )
{
price= Open [shift];
tiket= OrderSend ( Symbol (), OP_SELLLIMIT ,lot,price, 3 ,price+StopLossPips* Point ,price-TakeProfitPips* Point );
if (tiket< 0 )
{
Print ( "Ошибка OrderSend № - " , GetLastError ());
}
}
if ( OrdersTotal ()!= 0 )
{
for (cnt= 0 ; cnt< OrdersTotal (); cnt++)
OrderSelect (cnt, SELECT_BY_POS ); // Если есть следующий
{ // Анализ ордеров:
price= OrderOpenPrice ();
otkt = OrderTicket ();
n=otkt;
//--------------------------------------------------------------if ( OrderType ()== OP_SELL && OrderMagicNumber ()== 0 )
{
tiket= OrderSend ( Symbol (), OP_SELLLIMIT ,lot* 3 ,price+ 100 * Point , 1 ,price+StopLossPips* Point ,price-TakeProfitPips* Point , "My order" ,n);
tiket= OrderSend ( Symbol (), OP_SELLLIMIT ,lot* 9 ,price+ 200 * Point , 1 ,price+StopLossPips* Point ,price-TakeProfitPips* Point , "My order" ,n);
}
}
}
_OrdersTotal = OrdersTotal (); // запоминаем общее количество позицийArrayResize ( now_OrdersArray, _OrdersTotal ); // изменяем размер массива открытых позиций под текущее кол-воArrayInitialize ( now_OrdersArray, 0.0 ); // обнуляем массив
now_OrdersTotal = 0 ; // обнуляем количество позиций, соответствующих критериямArrayInitialize ( now_ClosedOrdersArray, 0.0 ); // обнуляем массивы закрытых позиций и сработавших ордеров//+------------------------------------------------------------------+//| Перебираем все позиции и записываем в массив //+------------------------------------------------------------------+for ( int z = _OrdersTotal - 1 ; z >= 0 ; z -- )
{
if ( OrderSelect ( z, SELECT_BY_POS ) )
{
now_OrdersArray[now_OrdersTotal][ 0 ] = OrderTicket ();
now_OrdersArray[now_OrdersTotal][ 1 ] = OrderType ();
now_OrdersTotal ++;
}
}
ArrayResize ( now_OrdersArray, now_OrdersTotal ); // изменяем размер массива открытых позиций под кол-во позиций, соответствующих критериям//+------------------------------------------------------------------+//| Перебираем список позиций предыдущего тика, и считаем сколько закрылось позиций и//| сработало отложенных ордеров//+------------------------------------------------------------------+for ( pre_CurOrder = 0 ; pre_CurOrder < pre_OrdersTotal; pre_CurOrder ++ )
{
tkt = pre_OrdersArray[pre_CurOrder][ 0 ]; // запоминаем тикет и тип ордера
type = pre_OrdersArray[pre_CurOrder][ 1 ];
OrderClosed = true ; // предпологаем, что если это позиция, то она закрыласьfor ( now_CurOrder = 0 ; now_CurOrder < now_OrdersTotal; now_CurOrder ++ ) // перебираем все позиции из текущего списка открытых позиций
{
if ( tkt == now_OrdersArray[now_CurOrder][ 0 ] ) // если позиция с таким тикетом есть в списке,
{ OrderClosed = false ; // значит позиция не была закрыта (ордер не был удалён)break ;
}
}
if ( OrderClosed ) // если была закрыта позиция (удалён ордер),
{
if ( OrderSelect ( tkt, SELECT_BY_TICKET )) // выбиаем ее
n = tkt; // присваеваем n номер тикета
}
}
//+------------------------------------------------------------------+//| Удаляем ордер с магическим номером = тикету закрытой ранее позиции //+------------------------------------------------------------------+for ( int z = _OrdersTotal - 1 ; z >= 0 ; z -- )
{
if ( OrderSelect ( z, SELECT_BY_POS ) )
otkt = OrderTicket ();
if (n == OrderMagicNumber ())
{ OrderDelete ( otkt );}
}
return ;
}
여러 날 동안 작동하는 복잡한 논리가 있지만 한 순간에 멈춥니다. 그러나 이것은 때때로 소스 코드를 편집할 수 없는 EX5에서 발생합니다. 지표나 어드바이저가 정지된 측면에서 프로그래밍 방식으로 결정할 수 있습니까? 이 지표 또는 저 지표의 계산된 부분에 대한 통계를 수집하시겠습니까?
지표를 사용하면 일시 중단된 상태에서 기호로 차트 업데이트를 종료하기 때문에 가능한 것 같습니다. 이것은 어떤 지표가 정지를 일으켰는지 지정하지 않은 경우에도 Expert Advisor에 의해 추적될 수 있습니다.
금지 기록을 세웠다. 금지 기간 동안 포럼에서 답변을 해주지만 읽을 수만 있습니다. 그리고 다음 금지 조치가 해제된 후 계속하기 위해 누가, 어디서 응답했는지 기억하기가 매우 어렵습니다. 어떻게 든이 문제를 해결할 수 있습니까 (더 이상 목욕에 들어가지 않는 것이 좋습니다)? 그리고 일반적으로 가끔 읽지만 지금은 답할 시간이 없습니다. "나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
먼저 생각한 다음 실행해야 합니다. 그리고 그 반대도 마찬가지입니다. 그러면 메모리에 문제가 없을 것입니다.
금말!!!
가끔 읽으시는데 지금은 답변드릴 시간이 없습니다. "나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
"나중에 답변"을 입력하기 위해 일종의 플래그 알림을 나에게 넣을 수 있습니까?
"지정된 숫자 값의 가장 가까운 정수로 반올림된 값을 반환"하는 MQL4의 MathRound() 에 대한 질문입니다.
코드:
결과:
친절한 사람들이 왜 그렇게 설명합니까? 이것이 그렇게되어야한다면 관리에 대한 요청 - 점 뒤의 첫 번째 숫자 만 고려된다는 문서를 추가하십시오.
동료 여러분, 도와주세요. 당신의 두뇌가 없습니다.
지정가 주문을 한 로봇은 오픈 포지션을 닫을 때(스탑이든 이익이든 상관없이) 나머지 보류를 제거해야 합니다. 위치. 저것. 삭제 트리거는 정확히 포지션을 닫는 이벤트여야 합니다. 저에게 이 경우 이 포지션이 어떻게 청산되었는지는 중요하지 않습니다(청산이 SL에 있는 경우 삭제해야 할 한도가 남아 있지 않다는 조건만 적용됩니다). 그러나 자세히 설명하고 모든 것을 올바르게 수행하면 트리거는 TP입니다.
로봇은 지연을 제거하지만 위치가 닫힌 후가 아니라 배치된 직후에 제거하는 것으로 나타났습니다. 그리고 그는 계속해서 보류 주문을 걸고 삭제 하면서 자신과 싸우기 시작합니다. 무엇이 잘못되었는지 보십시오.
좋은 사람들, 도와주세요. Macbook의 MT4에 러시아어를 넣을 수 없습니다. 있는 것 같지만 상형 문자로 표시되지만 메타 편집기에서는 모든 것이 정상입니다. 나는 Mac에서 Play를 통해 모든 것을 넣었습니다.
와인 버전 1.9.4. 도움을 주시면 대단히 감사하겠습니다.