오류, 버그, 질문 - 페이지 1521

 
Ilya Malev :
편집기에서 기본적으로 생성된 지표의 OnCalculate에 텍스트를 붙여넣습니다. 아무 차트에나 놓습니다. 차트 창의 왼쪽 상단에 표시기가 작동하는 것을 볼 수 있습니다. 표시기 목록에서 "삭제"를 선택하면 작업이 중지되지 않고 왼쪽 상단 모서리 에 표시됩니다. 그리고 창을 닫아도 멈추지 않습니다. 그리고 새 창을 연 후 새 창에서 계속됩니다. 게다가 이 창은 처음에 있었던 것과 같은 기호가 아닐 수도 있습니다. :)
터미널이 닫힌 경우에만 표시등이 작동을 멈춥니다. 그리고 중지 여부는 알 수 없습니다. 다시 시작하려면 작업 관리자를 통해 터미널을 수동으로 제거해야했습니다 ...

IsStopped 함수의 도움말에 따르면 mql 프로그램의 실행을 종료하라는 명령을 받으면 3초 후에 프로그램이 강제로 종료됩니다.

또한, while(true)이 while(!IsStopped())로 대체되면 차트에서 제거될 때 표시기가 성공적으로 작업을 완료합니다.

공습 경보 해제. 그들은 일상적인 제거를 위해 방종했습니다.

터미널을 닫으면 모든 것이 어려워집니다. 3초를 넘지 않습니다.

그리고 우리가 문서에 그것을 쓸지 확신이 서지 않습니다. 1. 그런 미친 지표를 쓰는 데 탐닉하지 마십시오(확인하려고 쓴 건가요?) 2. 약화되고 강화됩니다.

 
Alexandre :

내부 컴파일러 오류에 대한 재미있는 이유(표시기에 사용된 기능):

...

치료법은 분명하지만 동의합니다. 매우 재미있는 결함입니다. :)))

메시지 감사합니다!

나는 당신 에게 개인 메시지 를 썼습니다.
 
안녕하세요. 이전 위치를 연 후 n- 의 위치를 여는 코드를 작성하는 것은 불가능합니다. Time[i], iBarShift, iTime을 사용해 보았습니다. 모두 실패했습니다. 프로그래밍 초보자입니다. 검색 결과 아무것도 나오지 않았습니다.
 

Dmitri Custurov :
Здравствуйте. Не получается написать код, который открывал бы позицию через n- количество баров после открытия предыдущей позиции. Пробовал использовать Time[i], iBarShift, iTime. Все безуспешно. В программировании новичок. Поиск ничего не дал.

인사말, 오류를 찾는 데 도움을 받으려면 최소한 코드를 첨부해야 합니다. 아무도 여기에 당신을 대신하여 글을 쓰지 않을 것입니다. 여기에서는 실수를 찾고 수정하도록 조언하는 것이 관례입니다. 또는 - 프리랜서에 문의하십시오.
 

코드는 다음과 같습니다.

if (( OrderSelect (0,SELECT_BY_POS,MODE_TRADES)==False)&&(신호==1))
{int send1=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 1, 0, Red);
z=1;

타이머=시간[0];}

TimerNull=iBarShift(NULL,0,타이머,거짓);

if ((TimerNull>=n)&&(z==1))

{int send2=OrderSend(Symbol(), OP_SELL, 볼륨_, 입찰가, 0, 0, 0, NULL, 2, 0, 빨간색);

z=2;}

또한 다음과 같이 시도했습니다.

if ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(신호==1))
{int send1=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 1, 0, Red);
z=1;

타이머=시간[0];}

TimerNull=시간[0];

if ((TimerNull>=(Timer+2700))&&(z==1)) //예를 들어, n 대신 2700초를 넣었습니다. 테스트할 때 15분 초 3개를 의미했습니다) {int send2= OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);

z=2;}

또한 다음과 같이 합니다.

if ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(신호==1))
{int send1=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 1, 0, Red);
z=1;

타이머=시간[0];}

TimerNull=시간[0];

if ((CurrentTime()>=(타이머+2700))&&(z==1))

{int send2=OrderSend(Symbol(), OP_SELL, 볼륨_, 입찰가, 0, 0, 0, NULL, 2, 0, 빨간색); //이 경우 2700을 제거했을 때 동일한 막대의 첫 번째 거래 직후에 두 번째 거래가 열렸고 이는 논리적입니다. 그리고 2700이 아닌 600까지 아무 숫자나 넣어도 같은 바에서 2차 거래도 열렸습니다. 값이 600보다 크면 두 번째 거래가 열리지 않았습니다. 문제가 무엇인지 알 수 없습니다. 도움을 주시면 대단히 감사하겠습니다.

Timer 및 TimerNull 매개변수는 날짜/시간 형식입니다.


 

귀하의 예에는 예시 위치에 대한 열거가 없습니다.

if (( OrderSelect (0,SELECT_BY_POS,MODE_TRADES)==False)&&(신호==1))

따라서 항상 0 위치를 선택합니다.

 
메인 로직이 작동하도록 아직 초안을 작성 중입니다. 그 후에는 개선하겠습니다. 이 경우 내가 틀렸을 수도 있습니다. 문제는 코드의 두 번째 부분에 있습니다.
 
Slawa :

공습 경보 해제. 그들은 일상적인 제거를 위해 방종했습니다.

터미널을 닫으면 모든 것이 힘들어집니다. 3초를 넘지 않습니다.

그리고 우리가 문서에 그것을 쓸지 확신이 서지 않습니다. 1. 그런 미친 지표를 작성하는 데 탐닉하지 마십시오 (확인하기 위해 작성 했습니까?) 2. 약화되고 강화됩니다.

글쎄, 이미 강화하거나 인증서를 수정하십시오. 탐닉하지 말라는 것은 진지한 대화가 아닙니다. 프로그래머는 "보호"가 아니라 이해할 수 있고 잘 문서화된 소프트웨어를 기대합니다.

물론 이 코드는 귀하가 직접 요청한 데모 외에 다른 목적이 없습니다. 그리고 이것은 매우 무해합니다. 절전을 제거 하고 주석을 인쇄로 교체하면 미친 일이 됩니다. 4 또는 5의 로그에 인쇄되는 기가바이트의 스팸에 대한 보호 기능이 없습니다.

 
Dmitri Custurov :

코드는 다음과 같습니다.

if ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(신호==1))
{int send1=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 1, 0, Red);
z=1;

타이머=시간[0];}

TimerNull=iBarShift(NULL,0,타이머,거짓);

if ((TimerNull>=n)&&(z==1))

{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);

z=2;}

또한 다음과 같이 시도했습니다.

if ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(신호==1))
{int send1=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 1, 0, Red);
z=1;

타이머=시간[0];}

TimerNull=시간[0];

if ((TimerNull>=(Timer+2700))&&(z==1)) //예를 들어, n 대신 2700초를 넣었습니다. 테스트할 때 15분 초 3개를 의미했습니다) {int send2= OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);

z=2;}

또한 다음과 같이 합니다.

if ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(신호==1))
{int send1=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 1, 0, Red);
z=1;

타이머=시간[0];}

TimerNull=시간[0];

if ((CurrentTime()>=(Timer+2700))&&(z==1))

{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red); //이 경우 2700을 제거했을 때 동일한 막대의 첫 번째 거래 직후에 두 번째 거래가 열렸고 이는 논리적입니다. 그리고 2700이 아닌 600까지 아무 숫자나 넣어도 같은 바에서 2차 거래도 열렸습니다. 값이 600보다 크면 두 번째 거래가 열리지 않았습니다. 문제가 무엇인지 알 수 없습니다. 도움을 주시면 대단히 감사하겠습니다.

Timer 및 TimerNull 매개변수는 날짜/시간 형식입니다.


다음은 한 가지 가능한 구현입니다. 이 EA는 지정된 바 수 이후에 주문을 열어야 합니다. 그리고 메시지 패널의 SRC 버튼인 어드바이저 코드를 올바르게 삽입하는 방법을 배웁니다.

 //+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

input int nymber_bar= 10 ;
input double Volume_= 0.01 ;
int send1;
int send2;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (Total_orders( _Symbol , OP_SELL )== 0 && send1<= 0 )
     {
      send1= OrderSend ( Symbol (), OP_SELL ,Volume_, Bid , 0 , 0 , 0 , NULL , 1 , 0 ,Red);
     }

   if ( OrderSelect (send1, SELECT_BY_TICKET ))
     {
       if ( iBarShift ( NULL , 0 , OrderOpenTime ())>=nymber_bar)
        {
         send1= OrderSend ( Symbol (), OP_SELL ,Volume_, Bid , 0 , 0 , 0 , NULL , 1 , 0 ,Red);
        }
     }

  }
//+------------------------------------------------------------------+
int Total_orders( string symbol, int type)
  {
   int n= 0 ;
   int total= OrdersTotal ();

   for ( int i= 0 ; i<total; i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS ))
        {
         if ( OrderType ()!=type) continue ;
         //if(OrderMagicNumber()!=Magic)continue;
         if ( OrderSymbol ()!=symbol) continue ;
         n++;
        }
     }
   return (n);
  }
//+------------------------------------------------------------------+

111

 

아마도 Freelance 서비스의 사이트 개발자 또는 관리자에게 질문하십시오.

---

이전: 568개 작업 완료, 75% 개인

13개의 작품이 추가되었고(모두 개인) 완료: 581개, 75% 개인

---

따라서 질문은 plz를 해독합니다. 75%는 무엇을 의미합니까?