{ if (OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // TP와 SL 배치 } if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // TP 배치 { if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // true 확인 { if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // true인 경우 주문 수정 Print("오류_수정 - ",GetLastError()); else str=StringConcatenate("\n 내 티켓 번호는 ", OrderTicket(), "이고 손절매 설정은 ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // 새 코드 } } }
다음은 다른 게시물에서 다른 접근 방식을 설명하는 내용입니다.
>>여기 새로운 손절매 가격이 이전 손절매보다 최소 1포인트 이상 높은지 확인하여 간단히 해결할 수 있습니다. 매도 주문은 반대로 하면 됩니다.
if(OrderType()==OP_BUY){if(Bid-OrderOpenPrice()>(Point* TrailingStop )){double oldStopLoss =OrderStopLoss();double newStopLoss =Bid-Point* TrailingStop ;double nextStopLoss = oldStopLoss +Point;// Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79 if( newStopLoss >= nextStopLoss ) // checking that the new stoploss price is at least 1 point or greater then the old stoploss{OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss ,0,0,Green);return;}}}
다음은 내가 사용하는 전체 기능입니다. 지금 생각해보면 nextStopLoss보다 더 나은 var 이름을 사용할 수 있었고 OrderModify()에 오류 검사도 추가해야 합니다.
또한 내 Trailing Stop 기능은 동시에 여러 주문을 열 수 있는 EA에 있으므로 이러한 매개변수가 있으므로 동시에 여러 주문에 대해 Trailing Stop을 업데이트할 수 있습니다.
void CheckTrailingStop (int order_Ticket ,int trailingStopValue ){double oldStopLoss ;double newStopLoss ;double nextStopLoss ;int _trailingStop = trailingStopValue ;if( order_Ticket <0)return;if(OrderSelect( order_Ticket , SELECT_BY_TICKET , MODE_TRADES )==false){Print("CheckTrailingStop() - OrderSelect returned the error of ",GetLastError());return;}if(OrderType()==OP_BUY){if(Bid-OrderOpenPrice()>Point* _trailingStop ){
oldStopLoss =OrderStopLoss();
newStopLoss =Bid-Point* _trailingStop ;
nextStopLoss = oldStopLoss +Point;// Adding 1 point to oldStopLoss, i.e. 76.78 to 76.79 if( newStopLoss >= nextStopLoss ){OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss ,0,0,Green);return;}}}if(OrderType()==OP_SELL){if(OrderOpenPrice()-Ask>Point* _trailingStop ){
oldStopLoss =OrderStopLoss();
newStopLoss =Ask+Point* _trailingStop ;
nextStopLoss = oldStopLoss -Point;// Subtracting 1 point from oldStopLoss, i.e. 76.78 to 76.77if( newStopLoss <= nextStopLoss ||(OrderStopLoss()==0)){OrderModify(OrderTicket(),OrderOpenPrice(), newStopLoss ,0,0,Green);return;}}}}
방그로쉬
입력 감사합니다
내가 이해하는 것을 도와줄 수 있니?
이 올바른지
나는 자동 트레일로 EA를 한다
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{if (OrderStopLoss()==0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); // TP와 SL 배치
}
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // TP 배치
{
if(OrderStopLoss()>(Ask+Point*TrailingStop)+Point) // true 확인
{
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red)) // true인 경우 주문 수정
Print("오류_수정 - ",GetLastError());
else str=StringConcatenate("\n 내 티켓 번호는 ", OrderTicket(), "이고 손절매 설정은 ", DoubleToStr(Ask+Point*TrailingStop,Digits)); // 새 코드
}
}
}
다음은 다른 게시물에서 다른 접근 방식을 설명하는 내용입니다.
>>여기 새로운 손절매 가격이 이전 손절매보다 최소 1포인트 이상 높은지 확인하여 간단히 해결할 수 있습니다. 매도 주문은 반대로 하면 됩니다.
다음은 내가 사용하는 전체 기능입니다. 지금 생각해보면 nextStopLoss보다 더 나은 var 이름을 사용할 수 있었고 OrderModify()에 오류 검사도 추가해야 합니다.
또한 내 Trailing Stop 기능은 동시에 여러 주문을 열 수 있는 EA에 있으므로 이러한 매개변수가 있으므로 동시에 여러 주문에 대해 Trailing Stop을 업데이트할 수 있습니다.
그런 다음 내 start() 함수에 다음이 있습니다.
다른 함수 호출은 그대로 두었습니다. 코드를 가능한 한 특정 함수로 분할하는 것을 좋아한다는 것을 알 수 있습니다. 그것은 일을 훨씬 쉽게 만듭니다.
EA에 행운을 빕니다.
다음은 다른 게시물에서 다른 접근 방식을 설명하는 내용입니다.
>>여기 새로운 손절매 가격이 이전 손절매보다 최소 1포인트 이상 높은지 확인하여 간단히 해결할 수 있습니다. 매도 주문은 반대로 하면 됩니다.
다음은 내가 사용하는 전체 기능입니다. 지금 생각해보면 nextStopLoss보다 더 나은 var 이름을 사용할 수 있었고 OrderModify()에 오류 검사도 추가해야 합니다.
또한 내 Trailing Stop 기능은 동시에 여러 주문을 열 수 있는 EA에 있으므로 이러한 매개변수가 있으므로 동시에 여러 주문에 대해 Trailing Stop을 업데이트할 수 있습니다.
그런 다음 내 start() 함수에 다음이 있습니다.
다른 함수 호출은 그대로 두었습니다. 코드를 가능한 한 특정 함수로 분할하는 것을 좋아한다는 것을 알 수 있습니다. 그것은 일을 훨씬 쉽게 만듭니다.
EA에 행운을 빕니다.
감사합니다-잘 생겼어요
그래서 당신은 ea의 맨 아래에 start() 함수 를 배치합니까?
나는 끔찍한 오류에도 문제가 있습니다. 문제는 손절매나 이익실현이 없고, 보류 중인 주문을 하지 않고 시장에서 많은 핍이 있어야 문제가 없어야 한다는 것입니다...
good'ole 130의 문제는 클래스나 오류 그룹 중 하나를 표시하고 즉각적인 수정으로 이어지지 않는다는 것입니다.
문제를 고칠 수도 있지만 여전히 문제가 있습니다.
여기에서 발생하는 것은 오타뿐입니까?
Buy Stop 주문을 의도했을 때 Ask 위에 Buy Limit를 입력하고 있습니까?
FWIW
-BB-
good'ole 130의 문제는 클래스나 오류 그룹 중 하나를 표시하고 즉각적인 수정으로 이어지지 않는다는 것입니다.
문제를 고칠 수도 있지만 여전히 문제가 있습니다.
여기에서 발생하는 것은 오타뿐입니까?
Buy Stop 주문을 의도했을 때 Ask 위에 Buy Limit를 입력하고 있습니까?
FWIW
-BB-
작업 유형을 선택하는 기능이 있습니다.
이와 같이:
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,매일: pylon 0 @ 0.8024에 대한 레벨 2에서 시작 매도, 입찰가 = 0.8016
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,매일: OrderSend 오류 130
09:28:46 2008.06.09 00:00 ForexCraft2 EURGBP,매일: ReliableOrderSend 오류: 130: 잘못된 중지.
안녕하세요 이코노미스트입니다.
그냥 몇 가지 빠른 ...
1. WhatOperation()이 주어진 실제 규범을 가지지 않는 한 ToCompare에서 정규화를 보지 마십시오.
2. 이중 구성 요소에 문제가 있음 - 예: '조건문 실패... [At wits end] if ( 1.4225 > 1.4225) is NOT TRUE!!!!!!'
3. https://book.mql4.com/appendix/limits 의 지침을 따르십니까?
문안 인사
130으로 '빠른 질문' 에서 내 오류를 해결하기 위해이 게시물을 연구했습니다. 주문 보내기 기능과 인쇄 기능이있는 일지 항목이 있습니다. 무슨 일이 일어나고 있는지 아는 사람 있습니까?
감사해요,
바우어 보이
.
.../24681에서 볼 수 있듯이
1. StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
SL,TP는 Bid 에서 최소한 StopLevel 포인트 떨어져 있어야 합니다.
아래 참조(**)
2. ACCTxx = NormalizeDouble(Ask ..(..), Digits );
3. Print("Bid=",DoubleToString(Ask, Digits ),", Ask=",DoubleToString(Bid, Digits ));
4. 인쇄("손절매 값",DoubleToString( ACCTSL, Digits ),", stopLoss=",stopLoss);
인쇄("이익 가치 창출", DoubleToString(ACCTTP, Digits ),", takeProfit=",takeProfit);
왜 DoubleToString()인가? Print() 는 4자리만 표시합니다 .
Btw , 나는 또한 적어도 한 번은 Print("MyDig=",MyDig); 왜요? 그런 다음 그것에 대해 걱정해야 할 방법이 없습니다. 사소해 보일 수 있지만 이러한 간단한 것들을 둘러싼 재미에 놀라게 될 것입니다!
5. 모든 문제는 사용 가능한 모든 정보를 손끝으로 가져와 표시 하여 쉽게 해결할 수 있습니다.
그럼 구식 종이+연필로 오해가 있는 부분 이 보이네요 .
(**)
참조: https://book.mql4.com/appendix/limits
StopLevel 최소 거리 제한.
다음 중 하나에 해당하는 경우 거래가 이루어지지 않습니다.
.
.../24681에서 볼 수 있듯이
1. StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
SL,TP는 Bid 에서 최소한 StopLevel 포인트 떨어져 있어야 합니다.
아래 참조(**)
2. ACCTxx = NormalizeDouble(Ask ..(..), Digits );
3. Print("Bid=",DoubleToString(Ask, Digits ),", Ask=",DoubleToString(Bid, Digits ));
4. 인쇄("손절매 값",DoubleToString( ACCTSL, Digits ),", stopLoss=",stopLoss);
인쇄("이익 가치 창출", DoubleToString(ACCTTP, Digits ),", takeProfit=",takeProfit);
왜 DoubleToString()인가? Print() 는 4자리만 표시합니다 .
Btw , 나는 또한 적어도 한 번은 Print("MyDig=",MyDig); 왜요? 그런 다음 그것에 대해 걱정해야 할 방법이 없습니다. 사소해 보일 수 있지만 이러한 간단한 것들을 둘러싼 재미에 놀라게 될 것입니다!
5. 모든 문제는 사용 가능한 모든 정보를 손끝으로 가져와 표시 하여 쉽게 해결할 수 있습니다.
그럼 구식 종이+연필로 오해가 있는 부분 이 보이네요 .
(**)
참조: https://book.mql4.com/appendix/limits
StopLevel 최소 거리 제한.
다음 중 하나에 해당하는 경우 거래가 이루어지지 않습니다.
무슨 일이 일어나고 왜 이런 일이 일어나고 있는지 말할 수 없습니다.
2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: #130 오류로 OrderSend(Trender 베타 테스트) 실패
2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: MyDig=10
2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: 이익실현 가치1.43155, 이익실현=110
2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: 손절매 값1.42255, stopLoss=200
2009.08.05 14:32:26 Trender 베타 테스트 EURUSD,H1: Bid=1.44255, Ask=1.44229
무슨 일이 일어나고 왜 이런 일이 일어나고 있는지 말할 수 없습니다.
이제 전체 코드를 보여줄 때입니다. 망설이시면 PM을 이용하시면 됩니다.
입찰가보다 TP가 낮습니다.