주문 닫기가 작동하지 않음 - 페이지 3

 

고마워 thrdel, 나는 당신의 코딩을 조사할 것입니다. 당신은 정말 친절합니다. 다시 한 번 감사합니다

 
thrdel :


그것이 주문을 마감하는 가장 좋은 방법이 아니라는 의미라면 동의하지만 그 사람이 OrderSelect를 사용하기를 원하지 않고(또는 방법을 모르는 경우) 시장에 미결 주문을 남기지 않으면 작동합니다.

우리는 여기에서 서로를 도우려고 노력하지만 귀하의 답변은 조금 도움이 되지 않았습니다. 귀하는 그에게 주문 선택 기능을 사용하는 방법을 보여주지 않았고 귀하의 의견으로 인해 그의 EA가 더 잘 작동하지 않습니다.

다음에 도움을 주고 싶다면 올바른 방법으로 하고 올바른 코드를 입력하여 다른 사람들이 실제로 무언가를 배울 수 있도록 하십시오.

 
내 질문에 게시하는 모든 사람에게 감사합니다. 내 의도는 bar2가 특정 조건을 충족할 때 거래를 시작하는 것입니다. 저는 GBPJPY에서 테스트 중이며 MQL4를 처음 접하기 때문에 한 번에 하나의 거래를 엽니다. 단 한 번의 거래로 Orderclose()에서 티켓을 사용할 수 있습니다. 나는 아직 OrderSelect에 익숙하지 않습니다. 따라서 bar3가 특정 조건을 충족하면 거래가 종료됩니다. 질문을 하고 싶습니다. 디버깅 목적으로 파일 안에 프로그램 실행을 저장하는 방법이 있습니까? 프로그램이 실행될 때 실행의 어느 부분이 잘못되었는지 알 수 없다는 것을 알았습니다.
 
chuale :
내 질문에 게시하는 모든 사람에게 감사합니다. 내 의도는 bar2가 특정 조건을 충족할 때 거래를 시작하는 것입니다. 저는 GBPJPY에서 테스트 중이며 MQL4를 처음 접하기 때문에 한 번에 하나의 거래를 엽니다. 단 한 번의 거래로 Orderclose()에서 티켓을 사용할 수 있습니다. 나는 아직 OrderSelect에 익숙하지 않습니다. 따라서 bar3가 특정 조건을 충족하면 거래가 종료됩니다. 질문을 하고 싶습니다. 디버깅 목적으로 파일 안에 프로그램 실행을 저장하는 방법이 있습니까? 프로그램이 실행될 때 실행의 어느 부분이 잘못되었는지 알 수 없다는 것을 알았습니다.

Chuale을 환영합니다. 저는 이 포럼에서 다른 사람들로부터 많은 것을 배웠으므로 문제가 없습니다. 프로그램 실행을 파일에 저장할 필요는 없습니다. 변수 값과 발생할 수 있는 오류를 관찰하는 몇 가지 방법이 있습니다. 저는 주로 Comment() 함수 와 Print() 함수를 사용합니다. 필요한 경우 예제를 보낼 수 있습니다. 앞서 언급했듯이 GBPJPY는 긍정적인 결과를 보여주지 않았지만 USDJPY는 긍정적인 결과를 보여주었습니다. 나는 한 달(2014년 1월 21일 - 2015년 2월 25일) 동안만 백 테스트를 실행했고 내 설정으로 수익은 400달러가 조금 넘었습니다. 시간이 되는 대로 다른 쌍을 테스트하고 알려 드리겠습니다. 또한 Print() 또는 Comment()를 사용하여 실시간으로 화면의 값을 보는 방법에 대한 도움이 필요하면 알려주십시오. 이전에 첨부된 사진은 한 달 동안의 EA 성능 그래프입니다. 여기까지는 나쁘지 않아 보입니다.
 

친애하는 델,

고맙습니다

예, Print()를 사용하고 있습니다. 더 많은 열린 거래가 있는 경우 OrderSelect()를 사용 하는 방법을 알아야 합니다. 단일 거래의 경우 SELECT_BY_POS를 사용하면 index(OrderSelect(int index, in select, int pool=MODE_TRADES)의 값은 무엇입니까? 1입니까?

또는 어떤 가치?

 
chuale :
내 질문에 게시하는 모든 사람에게 감사합니다. 내 의도는 bar2가 특정 조건을 충족할 때 거래를 시작하는 것입니다. 저는 GBPJPY에서 테스트 중이며 MQL4를 처음 접하기 때문에 한 번에 하나의 거래를 엽니다. 단 한 번의 거래로 Orderclose()에서 티켓을 사용할 수 있습니다. 나는 아직 OrderSelect에 익숙하지 않습니다. 따라서 bar3가 특정 조건을 충족하면 거래가 종료됩니다. 질문을 하고 싶습니다. 디버깅 목적으로 파일 안에 프로그램 실행을 저장하는 방법이 있습니까? 프로그램이 실행될 때 실행의 어느 부분이 잘못되었는지 알 수 없다는 것을 알았습니다.


다음은 주문 선택 기능을 사용하는 방법의 예입니다.

이 예에서 CountTrades 함수는 모든 미결 주문과 보류 주문 을 확인하고 일치하는 기호와 매직 번호가 없는 주문은 버리고 필요한 것만 계산합니다.

이 예에서는 가장 최근 것부터 첫 번째 것까지 선택합니다.

도움이 더 필요하면 알려주세요.

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
/*
On every tick program checks what the value of myTrades is
by calling (executing) the CountTrades() function and asign the value
returned to myTrades..
*/
int myTrades = CountTrades();
/*
Comment() function will display the words in quotes and the value of 
myTrades variable.
*/
Comment ( "You have " +myTrades+ " open trades." );
   
  }
//+------------------------------------------------------------------+
int CountTrades()
{
int count= 0 ; // we start counting from zero
int trade;   // define a variable that will hold the total number of trades that are open
// Get the number of trades from OrdersTotal() and asign that value to trade variable.
for (trade= OrdersTotal ()- 1 ;trade>= 0 ;trade--)
   {
   OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ); // Select orders by position (OP_BUY and OP_SELL) - orders can be selected by position or by ticket
                                                 // select from Open or pending orders = MODE_TRADES or select from History = MODE_HISTORY
   if ( OrderSymbol ()!= Symbol () || OrderMagicNumber () != MagicNumber) // if the order has a different symbol or magic number, skip to next order
   continue ;
   if ( OrderSymbol ()== Symbol () && OrderMagicNumber () == MagicNumber) // if symbol is right and magic number is right, that is my order ,then
   if ( OrderType ()== OP_SELL                                          // if it's an open sell do this.....
   || OrderType ()== OP_BUY )                                         // if it's an open buy do this......      
   count++;                                                         // in this example increase the counter since I'm counting all my orders
   }
return (count);                                                     // When finished counting, return the result
}
 
thrdel :


그것이 주문을 마감하는 가장 좋은 방법이 아니라는 의미라면 동의하지만 그 사람이 OrderSelect를 사용하기를 원하지 않고(또는 방법을 모르는 경우) 시장에 미결 주문을 남기지 않으면 작동합니다.

우리는 여기에서 서로를 도우려고 노력하지만 귀하의 답변은 조금 도움이 되지 않았습니다. 귀하는 그에게 주문 선택 기능을 사용하는 방법을 보여주지 않았고 귀하의 의견으로 인해 그의 EA가 더 잘 작동하지 않습니다.

다음에 도움을 주고 싶다면 올바른 방법으로 하고 올바른 코드를 입력하여 다른 사람들이 실제로 무언가를 배울 수 있도록 하십시오.


도움을 주려고 하면 올바르게 설명하십시오.

당신이 말했다

thrdel :

먼저 OrdersTotal()을 사용하여 주문을 계산합니다.

total= OrdersTotal ();


나쁜 예 ...... 당신이 준

그 사람이 OrderSelect() 사용을 원하지 않으면 EA 프로그래밍을 중지해야 합니다.

여기에서 말하는 큰 넌센스, https://www.mql5.com/en/forum/149958/page2#915413

나는 당신의 예제 코드에 주석을 달고 당신이 해야 할 일을 말했습니다.

내가 하는 방법을 제시한 많은 예가 있습니다 ...

당신이 그들을 찾고 싶다면 그것을 위해 구글

 
thrdel :


당신이 잘못한 몇 가지가 있습니다. 이 EA가 M1 시간 프레임에 JPY 쌍에서 작동하기를 원한다고 가정합니다. 새 바에만 주문하고 새 바에만 주문을 마감하시겠습니까, 아니면 새 바에 입장하고 조건이 충족되면 종료하시겠습니까? 제 생각은 다음과 같습니다.

먼저 OrdersTotal()을 사용하여 주문을 계산합니다.

그런 다음 변수를 계산하십시오.

시장에 주문이 있는 경우 마감해야 하는지 확인하십시오.

시장에 주문이 없으면 진입 조건이 충족되는지 확인하십시오.

질문이 있으면 알려주세요.

 
다음을 컴파일하면 시간 함수 가 정의되지 않는다고 말했습니다. 조언 부탁드립니다.
 if ( Time [ 0 ]==previousTime) return ( 0 );         //EA will not go past this point unless it is a new bar
   previousTime= Time [ 0 ];                         // If it was a new bar , it's old now but continue to the end
 
chuale :
다음을 컴파일하면 시간 함수가 정의되지 않는다고 말했습니다. 조언 부탁드립니다.


확인 시간에 괄호를 잘못 입력하여 수정했습니다. () 대신 []로 가정합니다. 감사해요