[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 77

 

여보세요

특종을 사는 이유를 알려주십시오. 조건이 익으면 포지션을 닫지 않습니다.

/---- 입력 매개변수
extern int PerRSI=8;
외부 정수 MagicNumber=77771;
extern 이중 로트=1.0;
//+----------------------------------------------- --------------------+
정수 시작()
{
정수
cnt, // 주문 인덱스
티켓, // 주문 식별 번호
총; // 이미 열려 있는 주문의 수
더블
rsi_0, // 값. rsi_0 현재
rsi_1; // 값. rsi_1 첫 번째 막대
if(막대<100)
{
Print("100개 미만의 막대");
리턴(0);
}
총계=주문총계();
if(총<1)
{
rsi_0=iRSI(NULL,0, PerRSI,0,0); // 현재 막대
rsi_1=iRSI(NULL,0, PerRSI,0,1); // 현재 막대에 1을 더한 값

if(rsi_0 < rsi_1 && rsi_0 < 30) // 선이 30을 넘으면
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print(" SELL 주문 이 열렸습니다 : ",OrderOpenPrice());
}
else Print("판매 주문 열기 오류: ",GetLastError());
리턴(0);
}
for(cnt=0;cnt<전체;cnt++)
{
주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) // 이것은 열린 위치입니까? OP_BUY 또는 OP_SELL
{
if(OrderType()==OP_BUY) // 오픈 포지션
{
if(rsi_0 > rsi_1 && rsi_0 > 70) // 선이 70을 넘으면
{
OrderClose(OrderTicket(),1,입찰,3,보라색); // 포지션을 닫는다

리턴(0); // 출구
}}}}}}
 
KoZaNOStra >> :

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "My RSI", MagicNamber,0,Green);
if(티켓>0)
{
if(OrderSelect(티켓,SELECT_BY_TICKET,MODE_TRADES))
Print("판매 주문이 열렸습니다 : ",OrderOpenPrice());
}


이게 대체 뭐야? OrderSelect()는 무엇을 위한 것입니까?


나머지는 파악하기 어렵기 때문입니다. 코드는 들여쓰기 없이 배치되며 괄호를 따라갈 수 없습니다. 시력을 망치고 싶지 않습니다.

 
후행 움직임을 볼 수 있도록 차트에 색상을 지정하는 방법은 무엇입니까?
 
anat писал(а) >>

당신의 도움을 주셔서 대단히 감사합니다! 또한 콘도르 - y. 이제 또 다른 문제. 여기에서 예를 들어 10개의 매수 포지션을 열었습니다. 정차 또는 1,2,3 등을 타고 닫을 때 포지션에서 매수 신호가 있으면 어드바이저가 매수를 시작합니다. 그리고 먼저 모든 주문을 마감해야 하며, 그런 다음 단일 오픈 포지션이 없을 때만 새로운 거래 주기가 시작됩니다. 저것들. 카운터가 필요합니다. 먼저 주어진 수까지 포지션을 오픈한 다음 포지션을 마감할 때 0으로 만듭니다. 미리 감사드립니다.

이제 그렇게 되었습니다. 하나 이상의 열린 주문이 있는 한 다른 주문은 열리지 않습니다. 그리고 다르게 해야 한다면 더 정확하게 쓰세요. 그리고 당신은 이미 주문이 열렸는지, kjulf에 열린 위치가 있는지 또는 열리지 않았는지 여부를 선택합니다.

 

그리고 여기 질문이 있습니다.

메타 트레이더에 디버깅 도구가 있습니까?

귀하의 경험을 공유해 주십시오. 스크립트와 조언자를 어떻게 디버그합니까?

그것은 모두 숫자, 매개변수, 알고리즘의 파급효과 등과 연결되어 있습니다. 알고리즘에서 발생하는 버그를 잡는 방법은 무엇입니까?

 
Ryan_ryan >> :

그리고 여기 질문이 있습니다.

메타 트레이더에 디버깅 도구가 있습니까?

귀하의 경험을 공유해 주십시오. 스크립트와 조언자를 어떻게 디버그합니까?

디버깅이 필요한 경우 Print()를 통해

그러나 대부분의 경우 이것은 필요하지 않습니다.

 

  RefreshRates();
  if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
  bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);  
  if (sellclose) 
  {
  PlaySound("money.wav");
  }
  else 
  {
  Print("Ошибка : ",Error(GetLastError()));
  PlaySound("timeout.wav");  
  }

이 구성에서 왜 주문을 닫은 후 "timeout.wav"가 먼저 들리고 닫히는 주문 수만큼 "오류 없음"이 나오는지 알려주세요(2개의 주문이 마감되면 "오류 없음"이 두 번 나오는 등) .) 그런 다음 "money.wav" ". 가장 재미있는 점은 이것이 짧은 거래에만 해당되며 긴 거래의 경우 모든 것이 잘 작동한다는 것입니다. 누구든지 무엇이 잘못되었고 어떻게 고칠 수 있는지 알고 있습니까?

 
Dimoncheg писал(а) >>

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

이 구성에서 왜 주문을 닫은 후 "timeout.wav"가 먼저 들리고 닫히는 주문 수만큼 "오류 없음"이 나오는지 알려주세요(2개의 주문이 마감되면 "오류 없음"이 두 번 나오는 등) .) 그런 다음 "money.wav" ". 재미있는 점은 이것이 짧은 거래에만 해당되며 긴 거래의 경우 모든 것이 잘 작동한다는 것입니다. 무엇이 잘못되었고 어떻게 처리되는지 아는 사람이 있습니까?

그리고 브래킷이 닫히지 않은 경우 첫 번째 후???

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

어쩐지 이 줄이 어쩐지 빠져

 
Dimoncheg >> :

RefreshRates();
if(OrderType()==OP_SELL && OrderMagicNumber()==mnum
bool sellclose = OrderClose(OrderTicket(),OrderLots(),Ask,3,YellowGreen);
if (sellclose)
{
PlaySound("money.wav");
}
else
{
Print("Ошибка : ",Error(GetLastError()));
PlaySound("timeout.wav");
}

이 구성에서 왜 주문을 닫은 후 "timeout.wav"가 먼저 들리고 닫히는 주문 수만큼 "오류 없음"이 나오는지 알려주세요(2개의 주문이 마감되면 "오류 없음"이 두 번 나오는 등) .) 그런 다음 "money.wav" ". 재미있는 점은 이것이 짧은 거래에만 해당되며 긴 거래의 경우 모든 것이 잘 작동한다는 것입니다. 누구든지 무엇이 잘못되었고 어떻게 고칠 수 있는지 알고 있습니까?


첫 번째 조건 if 문 아래의 조건은 다음 문(다음 줄)에만 적용됩니다.

나머지는 무조건 수행됩니다. 저것들. 주문을 종료하라는 명령이 없더라도 재생음 중 하나가 작동합니다.

다음과 같이 더 정확합니다.

   RefreshRates ( ) ;
   if ( OrderType ( ) = = OP_SELL & & OrderMagicNumber ( ) = = mnum ) 
   {
     bool sellclose = OrderClose ( OrderTicket ( ) , OrderLots ( ) , Ask , 3 , YellowGreen ) ;   
     if ( sellclose ) 
         PlaySound ( "money.wav" ) ;
     else 
     {
         Print ( "Ошибка : " , Error ( GetLastError ( ) ) ) ;
         PlaySound ( "timeout.wav" ) ;   
     }
   }
 
infinum13 >> :

그리고 브래킷이 닫히지 않은 경우 첫 번째 후???

if(OrderType()==OP_SELL && OrderMagicNumber()==mnum

어쩐지 이 줄이 어쩐지 빠져

닫힙니다. 실수로 삭제했습니다. 그렇지 않으면 컴파일되지 않았을 것입니다. if(OrderType()==OP_SELL && OrderMagicNumber()==mnum 삭제되지만 가장 재미있습니다. 긴 거래, 하지만 "timeout.wav" 소리와 함께 "오류 없음" 오류는 짧은 거래에만 작동하고, 긴 거래의 경우 구성이 잘 작동하며 동일한 브래킷이 있고 모든 것이 동일합니다.