2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: 신호 1.1322 < 마감 1.1304 ExistPosSell 0 2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: 신호 1.1322 > 종료 1.1304 ExistPosBuy 1 2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: 신호 1.1325 < 마감 1.1306 ExistPosSell 0 2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: 신호 1.1325 > 종료 1.1306 ExistPosBuy 1 2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: 신호 1.1326 < 마감 1.1296 ExistPosSell 0 2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: 신호 1.1326 > 종료 1.1296 ExistPosBuy 1 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 신호 1.1328 < 마감 1.1283 ExistPosSell 0 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 마감 #1 매수 0.01 EURUSD에 1.13598, 가격 1.12831 2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 신호 1.1328 > 종료 1.1283 ExistPosBuy 1 2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: 오픈 #4 매수 0.01 EURUSD at 1.13512 ok 2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: 신호 1.134 < 마감 1.135 ExistPosSell 0 2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: 신호 1.134 > 종료 1.135 ExistPosBuy 1
if (isNewBar()== true ) {
if (Signal > clos ) { //--------------------- МА выше цены закрытия предыдущего бара.if (ExistPositions( NULL , OP_BUY, Magic) == true ) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //-------- закрытие одной позиции с максимальным профитом в валюте депозита.if (ExistPositions( NULL , OP_BUY, Magic) == False) //----------- если позиции BUY отсутствуют то
ticket=OpenPosition( NULL ,OP_SELL, NDLot(Lot), 0 , 0 , Magic, Com);} //------------ открываем позицию SELLif (Signal < clos ) { //--------------------- МА ниже цены закрытия предыдущего бара.if (ExistPositions( NULL , OP_SELL, Magic) == true ) //---------------- Если есть позиция SELL то
ClosePosWithMaxProfitInCurrency(); //--------------------- закрытие одной позиции с максимальным профитом в валюте депозита.if (ExistPositions( NULL , OP_SELL, Magic) == False) //----------- если позиции SELL отсутствуют то
ticket=OpenPosition( NULL ,OP_BUY, NDLot(Lot), 0 , 0 , Magic, Com);} //------------ открываем позицию BUY
} return ;
질문이 있습니다. 가장 수익성이 높은 1개의 주문은 1개의 바에서 마감되어야 하며, 그런 다음 우리는 새로운 바를 기다렸다가 다시 1개의 수익성 있는 주문을 마감해야 합니다. 그리고 한 번에 모두가 아닙니다.
그런 다음 올바른 질문을 공식화해야 합니다. 신호는 1개만 받습니다. 그리고 새로운 바가 열릴 때. 그리고 시그널이 1개만 있다면 얼마나 많은 주문이 마감될까요?... 그리고 새로운 바에 시그널이 나타날 경우에만. 그리고 그것이 나타나지 않으면 다음 막대에서 주문이 마감됩니다. 그리고 다시, 신호가 있는 경우.
그런 다음 올바른 질문을 공식화해야 합니다. 신호는 1개만 받습니다. 그리고 새로운 바가 열릴 때. 그리고 시그널이 1개만 있다면 얼마나 많은 주문이 마감될까요?... 그리고 새로운 바에 시그널이 나타날 경우에만. 그리고 그것이 나타나지 않으면 다음 막대에서 주문이 마감됩니다. 그리고 다시, 신호가 있는 경우.
이러한 경우 순서도가 일반적으로 도움이 됩니다. 또는 종이나 텍스트 파일에 알고리즘을 한 점 한 점 자세히 설명해야 합니다. 그래야만 코드를 작성하는 방법을 이해할 수 있습니다.
그리고 이제 다시 질문은 위의 작성되지 않은 알고리즘에서 이 코드에 올바르게 작성되지 않은 것이 무엇입니까?
코드에는 일련의 명령이 포함되어 있습니다. 터미널은 당신이 무엇을 필요로 하는지 알지 못하고, 단지 코드에 쓰여진 것만 압니다!
...
if (isNewBar()) {
if (Signal > clos ) { //--------------------- МА выше цены закрытия предыдущего бара.if (ExistPositions( NULL , OP_BUY, Magic)) //---------------- Если есть позиция BUY то
ClosePosWithMaxProfitInCurrency(); //-------- закрытие одной позиции с максимальным профитом в валюте депозита.if(!ExistPositions( NULL, OP_BUY, Magic))//----------- если позиции BUY отсутствуют тоsellSignal= true ;
}
// и аналогично для п.4.
}
return ;
...
voidOnTimer () {
if ( sellSignal ) {
ticket=OpenPosition( NULL ,OP_SELL, NDLot(Lot), 0 , 0 , Magic, Com); //------------ открываем позицию SELLsellSignal= false ;
}
// и аналогично для buy
}
최근 경고 게시: #18550 . 그러나 SendNotification을 추가하여 개선할 수 있습니다.
내가 선택한 줄을 소스 코드에 추가하고 Indicators 폴더에 넣고 컴파일해야 합니다. 이 표시기는 차트에 여러 번 추가할 수 있으며 서로 다른 레벨이 교차할 때 신호를 수신합니다. 코드는 온라인으로 완성되었습니다. 결과는 확인되지 않았습니다.
거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼
MQL4 및 MQL5에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론
글라브레드FX , 2022.01.17 18:59
문제가 무엇인지 알려주십시오. 코드는 주문을 닫고 주문 이 없으면 새 주문을 엽니다.
하지만 어떤 이유로 주문을 1 개만 닫고 다음 신호까지 멈춥니다.
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: 신호 1.1322 < 마감 1.1304 ExistPosSell 0
2022.01.17 16:22:08.389 2022.01.04 08:00:00 e: 신호 1.1322 > 종료 1.1304 ExistPosBuy 1
2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: 신호 1.1325 < 마감 1.1306 ExistPosSell 0
2022.01.17 16:22:08.366 2022.01.04 04:00:00 e: 신호 1.1325 > 종료 1.1306 ExistPosBuy 1
2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: 신호 1.1326 < 마감 1.1296 ExistPosSell 0
2022.01.17 16:22:08.327 2022.01.04 00:00:00 e: 신호 1.1326 > 종료 1.1296 ExistPosBuy 1
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 신호 1.1328 < 마감 1.1283 ExistPosSell 0
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 마감 #1 매수 0.01 EURUSD에 1.13598, 가격 1.12831
2022.01.17 16:22:08.298 2022.01.03 20:00:00 e: 신호 1.1328 > 종료 1.1283 ExistPosBuy 1
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: 오픈 #4 매수 0.01 EURUSD at 1.13512 ok
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: 신호 1.134 < 마감 1.135 ExistPosSell 0
2022.01.17 16:22:08.190 2022.01.03 16:00:00 e: 신호 1.134 > 종료 1.135 ExistPosBuy 1
질문과 코드에 조금 더 주의 를 기울이면 모든 것을 스스로 이해할 수 있습니다.
질문이 있습니다. 가장 수익성이 높은 1개의 주문은 1개의 막대에서 마감되어야 하며, 그런 다음 우리는 새로운 막대를 기다렸다가 다시 1개의 수익성 있는 주문을 마감해야 합니다. 그리고 한 번에 모두가 아닙니다.
첫 번째 막대에서 닫히고 다음 막대에서 아무 일도 일어나지 않습니다.
질문이 있습니다. 가장 수익성이 높은 1개의 주문은 1개의 바에서 마감되어야 하며, 그런 다음 우리는 새로운 바를 기다렸다가 다시 1개의 수익성 있는 주문을 마감해야 합니다. 그리고 한 번에 모두가 아닙니다.
그런 다음 올바른 질문을 공식화해야 합니다. 신호는 1개만 받습니다. 그리고 새로운 바가 열릴 때. 그리고 시그널이 1개만 있다면 얼마나 많은 주문이 마감될까요?... 그리고 새로운 바에 시그널이 나타날 경우에만. 그리고 그것이 나타나지 않으면 다음 막대에서 주문이 마감됩니다. 그리고 다시, 신호가 있는 경우.
그런 다음 올바른 질문을 공식화해야 합니다. 신호는 1개만 받습니다. 그리고 새로운 바가 열릴 때. 그리고 시그널이 1개만 있다면 얼마나 많은 주문이 마감될까요?... 그리고 새로운 바에 시그널이 나타날 경우에만. 그리고 그것이 나타나지 않으면 다음 막대에서 주문이 마감됩니다. 그리고 다시, 신호가 있는 경우.
이러한 경우 순서도가 일반적으로 도움이 됩니다. 또는 종이나 텍스트 파일에 알고리즘을 한 점 한 점 자세히 설명해야 합니다. 그래야만 코드를 작성하는 방법을 이해할 수 있습니다.
우리는 1개의 주문을 마감하는 기능이 필요하며, 가장 먼저 사용할 수 있는 사람이 엽니다. 공유할 수 있는 사람.
따라서 알고 보면 알고리즘이 코드에 작성되어 있습니다 .
1) 새로운 바의 등장
2) MA가 종가보다 높으면 3단계로 이동하고, MA가 종가보다 낮으면 4단계로 이동합니다.
3) BUY 포지션이 있는 경우 예금 통화로 최대 이익으로 한 포지션 을 마감합니다.
3.1) 미결 주문이 없는 경우 구입 매도 포지션을 엽니다.
4) SELL 포지션이 있는 경우, 예금 통화로 최대 이익으로 한 포지션을 마감합니다.
4.1) 미결 주문이 없는 경우 팔다 매수 포지션을 엽니다.
그리고 이제 다시 질문은 위의 작성되지 않은 알고리즘에서 이 코드에 올바르게 작성되지 않은 것이 무엇입니까?
코드에는 일련의 명령이 포함되어 있습니다. 터미널은 당신이 무엇을 필요로 하는지 알지 못하고, 단지 코드에 쓰여진 것만 압니다!
글로벌 수준에서 buySignal 및 SellSignal 변수를 작성합니다.코드에는 일련의 명령이 포함되어 있습니다. 터미널은 당신이 무엇을 필요로 하는지 알지 못하고, 단지 코드에 쓰여진 것만 압니다!
이익이 아닌 시간순으로 주문을 마감해야 하는 문제가 있어 이 메시지를 삭제했습니다.
이익이 항상 필요한 것은 아니며 필요한 곳에 있지도 않기 때문입니다.
따라서 우리는 기능이 필요합니다. " 한 포지션을 닫고, 가장 먼저 사용 가능한 사람이 열었습니다."
이익이 아닌 시간순으로 주문을 마감해야 하는 문제가 있어 이 메시지를 삭제했습니다.
이익이 항상 필요한 것은 아니며 필요한 곳에 있지도 않기 때문입니다.
따라서 우리는 기능이 필요합니다. " 한 포지션을 닫고, 가장 먼저 사용 가능한 사람이 열었습니다."
이전 게시물에서 타이머에서 위치를 여는 예제를 추가했습니다. 위치가 열렸는지 확인합니다. 거기에서 자신의 기능을 대체할 수 있습니다.
이전 게시물에서 타이머에서 위치를 여는 예제를 추가했습니다. 위치가 열렸는지 확인합니다. 거기에서 자신의 기능을 대체할 수 있습니다.
그렇지는 않지만. 진행 상황을 추적해야 함
또는 OnTradeTransaction의 새 기능. 그리고 자리가 없으면 들어가세요. 또는 BuySignal 또는 SellSignal에 신호를 작성하고 예제에서 보여준 것처럼 OnTimer에서 처리합니다.