손절매를 수정하는 가장 좋은 방법은 스프레드에 대해 적절하게 생각하는 것입니다. 스프레드는 Ask와 Bid 사이의 거리입니다. 따라서 Bid를 사용하여 구매 주문 에 손절매를 추가하면 SL이 자동으로 스프레드를 포함하므로 이를 코딩할 필요가 없으며 스프레드를 효과적으로 완전히 무시할 수 있습니다. Ask + SL을 사용한 매도 거래의 경우 동일한 효과가 있습니다. 그러나 조심하십시오 --- 거래량이 적은 시간에는 스프레드가 더 커지고 예상했던 위치에서 SL이 훨씬 멀리 떨어질 수 있습니다 --- 따라서 추가를 방지하기 위해 일부 코드를 추가할 수 있습니다. 설정된 스프레드 크기 이상의 SL.
이제 스프레드에 대한 문제는 오류 130s의 다음 주요 원인이 EA가 여전히 실행되는 동안 가격이 변경되었다는 점에서 벗어났습니다. 이는 실행하는 데 오랜 시간이 걸리는 EA나 서버가 거래를 처리하느라 매우 바쁘기 때문에 EA 실행이 지연될 수 있습니다. 결과는 하나의 틱으로 인해 EA가 실행을 시작했지만 실행이 완료되기 전에 또 다른 틱이 발생하여 가격이 유효하지 않다는 것입니다.
두 경우 모두 RefreshRates를 사용하여 가격을 새로 고쳐야 합니다. while (RefrshRates() == 1) Sleep(5); ------ 또는 대기 시간으로 원하는 대로.
랩터: 저는 현재 테스트를 위해 데모 계정 으로 UWC-Trader를 사용하고 있습니다. 앞서 언급했듯이 저는 선물을 거래하고 있습니다. 예: ESZ1 및 FDXZ1.
W로더: 미안 나도 라운드하지 않습니다. "round"를 "4/5-Digit Brokers에 맞게 조정하십시오. IE 방금 코드를 적용했습니다. 이전 답변에서 사용하는 것처럼 OrderSend도 게시했습니다. 그리고 관련된 모든 변수의 값. 코드의 다른 부분이 흥미로울지 잘 모르겠습니다. SDC에서 제안한 미니 예제에서 보여주듯이 오류는 이 간단한 코드로 나눌 수 있습니다. 그래서 더 근본적이어야 합니다.
손절매를 수정하는 가장 좋은 방법은 스프레드에 대해 적절하게 생각하는 것입니다. 스프레드는 Ask와 Bid 사이의 거리입니다. 따라서 Bid를 사용하여 구매 주문 에 손절매를 추가하면 SL이 자동으로 스프레드를 포함하므로 이를 코딩할 필요가 없으며 스프레드를 효과적으로 완전히 무시할 수 있습니다. Ask + SL을 사용한 매도 거래의 경우 동일한 효과가 있습니다. 그러나 조심하십시오 --- 거래량이 적은 시간에는 스프레드가 더 커지고 예상했던 위치에서 SL이 훨씬 멀리 떨어질 수 있습니다 --- 따라서 추가를 방지하기 위해 일부 코드를 추가할 수 있습니다. 설정된 스프레드 크기 이상의 SL.
이제 스프레드에 대한 문제는 오류 130s의 다음 주요 원인이 EA가 여전히 실행되는 동안 가격이 변경되었다는 점에서 벗어났습니다. 이는 실행하는 데 오랜 시간이 걸리는 EA나 서버가 거래를 처리하느라 매우 바쁘기 때문에 EA 실행이 지연될 수 있습니다. 결과는 하나의 틱으로 인해 EA가 실행을 시작했지만 실행이 완료되기 전에 또 다른 틱이 발생하여 가격이 유효하지 않다는 것입니다.
두 경우 모두 RefreshRates를 사용하여 가격을 새로 고쳐야 합니다. while (RefrshRates() == 1) Sleep(5); ------ 또는 대기 시간으로 원하는 대로.
두 경우 모두 RefreshRates를 사용하여 가격을 새로 고쳐야 합니다. while (RefrshRates() == 1) Sleep(5); ------ 또는 대기 시간으로 원하는 대로.
AFAIK RefreshRates()는 오류 130과 관련이 없습니다.
RaptorUK를 사용하고 MODE_ASK 등을 사용하면 RefreshRates()가 필요 없다는 데 동의하지만 shinobi의 코드 예제에서와 같이 ....
예를 들어 다음과 같이 주문을 보냅니다.
int 티켓 = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, 녹색);
사전 정의된 변수 ASK가 사용 중이므로 매도/입찰 및 스프레드 값 이 변경되어 오류 130이 발생했을 수 있습니다. 이러한 경우 OrderSend 직전에 RefreshRates()를 사용할 수 있습니다.
RaptorUK를 사용하고 MODE_ASK 등을 사용하면 RefreshRates()가 필요 없다는 데 동의하지만 shinobi의 코드 예제에서와 같이 ....
예를 들어 다음과 같이 주문을 보냅니다.
int 티켓 = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, 녹색);
사전 정의된 변수 ASK가 사용 중이므로 요청/입찰 및 스프레드 값이 변경되어 오류 130이 발생했을 수 있습니다. 이러한 경우 OrderSend 직전에 RefreshRates()를 사용할 수 있습니다.
지금은 조금 바쁘지만 기회가 되면 귀하의 제안을 모두 시도한 다음 동일한 문제로 이 스레드를 우연히 발견할 수 있는 사람을 위해 요약 게시물을 작성하겠습니다.
감사합니다. 조심하세요!
시노비
int 티켓 = OrderSend(Symbol(), OP_BUY, position_size, Ask, SLIPPAGE, initial_stop, TAKEPROFIT, NULL, EXPERT_ID, 0, 녹색);
모든 것을 말하지 않습니다. Bid를 사용하여 initial_stop을 어떻게 계산하고 있습니까?
SLIPPAGE를 어떻게 계산하고 있습니까? 4/5 자리 브로커에 맞게 조정합니까?
잠시 휴식을 취해야 했습니다(이사, 새 직장).
하지만 이제 이 스레드를 시작하고 마침내 이 저주받은 #130 손절매 오류에 대한 해결책을 찾고 싶습니다.
귀하의 모든 조언에 감사드리며 모든 조언을 통합하려고 노력했습니다.
1: 퍼집니다.
2: 시장 환율 변경
3: 4-5 디지트-브로커
그래서 모든 제안을 통합했지만 오류는 여전히 지속됩니다. 내가 말할 수있는 한 그것은 이전과 마찬가지로 자주 발생하므로 다른 원인이 있어야합니다.
최근 로그는 다음과 같습니다.
틱 값: 12.50000000
위치 크기: 37.00000000
매도/입찰 1262.00000000/1261.75000000
손절매:12.59610000
position_size: 37
스프레드 0.25000000
오류는 긴 위치를 차지할 수 없습니다. 오류: #130 잘못된 정류장
위의 OrderSend 코드 라인은 기록된 값과 함께 긴 위치를 시도하고 취하는 데 사용되었습니다.
더 많은 아이디어가 있습니까? 원인은 무엇입니까?
감사해요!
시노비
ECN 브로커입니까?
ECN 중개인에서는 열고 그 다음 중지를 설정해야 합니다.
유효하지 않은 자릿수의 가능한 원인을 제거하기 위해 WHRoeders 코드에 따라 정지 손실을 반올림했습니다.
그냥 해
외부 이중 손절매 = 50;
외부 이중 TakeProfit = 50;
그런 다음 구매:
이중 SL = 입찰가 - 손절매 * 포인트 ;
이중 TP = 입찰 + 이익 실현 * 포인트 ;
int Ticket = OrderSend ( Symbol () , 0 , 1 , Ask , 2 , SL , TP , "" , 12345 ) ;
if( 티켓<0) print("오류="GetLastError());
판매를 위해:
더블 SL = 매도 + 손절매 * 포인트 ;
이중 TP = Ask - TakeProfit * 포인트 ;
int 티켓 = OrderSend ( 기호 () , 1 , 1 , Bid , 2 , SL , TP , "" , 12345 ) ;
if( 티켓<0) print("오류="GetLastError());
그런 다음 작동하지 않으면 로그 파일을 게시하십시오.
SDC:
다음과 같이 코드를 시도했습니다.
유일한 차이점은 Raptor 및 BigAI에서 언급한 RefreshRates 문제를 피하기 위해 Point, Ask 및 Bid를 MarketInfo로 대체했다는 것입니다.
이 간단한 예에서도 문제가 지속됩니다. 나는 아직도 얻는다
#ESZ1,M5: 오프닝 포지션
#ESZ1,M5: 틱값: 12.50000000
#ESZ1,M5: 위치 크기: 1.00000000
#ESZ1,M5: 매도/입찰 1244.50000000/1244.25000000
#ESZ1,M5: 스프레드 0.25000000
#ESZ1,M5: SL: 1244.00000000
#ESZ1,M5: TP: 1245.00000000
#ESZ1,M5: 오류=130
랩터:
저는 현재 테스트를 위해 데모 계정 으로 UWC-Trader를 사용하고 있습니다.
앞서 언급했듯이 저는 선물을 거래하고 있습니다. 예: ESZ1 및 FDXZ1.
W로더:
미안 나도 라운드하지 않습니다. "round"를 "4/5-Digit Brokers에 맞게 조정하십시오. IE 방금 코드를 적용했습니다.
이전 답변에서 사용하는 것처럼 OrderSend도 게시했습니다. 그리고 관련된 모든 변수의 값. 코드의 다른 부분이 흥미로울지 잘 모르겠습니다.
SDC에서 제안한 미니 예제에서 보여주듯이 오류는 이 간단한 코드로 나눌 수 있습니다. 그래서 더 근본적이어야 합니다.
나는 금속을 거래하지 않으므로 반올림이 중요하지 않아야 합니다.
나는 다음에 시도할 것이다:
열기(스톱로스 없음) 후 수정(스톱로스 설정).
귀하의 생각에 다시 한 번 감사드립니다.
시노비