지금까지 모두의 도움에 감사드립니다. 이제 오류 130 문제를 해결했다고 생각하지만, 내 OrderSelect 함수 에 심각한 문제가 있습니다. 이 기능이 가끔 일부 주문만 수정하는 이유일 가능성이 큽니다. 아래는 제가 인쇄한 목록입니다. OrderTicket #이 완전히 잘못되었습니다. 그 티켓 번호는 내가 EURAUD에 대해 개설한 거래에 속합니다. 모든 결과를 포함하지는 않았지만 실제로 OrderTicket 번호가 거래 터미널의 쌍과 일치하지 않는 여러 쌍이 있습니다.
누군가 보시고 OrderSelect에 무엇이 문제인지 알려주시겠습니까? 고맙습니다
2016.04.18 16:04:38.602Trailing_v19 EURUSD,M15: ticket = 0 나는 그 티켓이 OrdersTotal과 같은 값을 인쇄해야 한다고 생각하므로 내 카운터가 작동하지 않는 것 같습니다.
안녕하세요 여러분. 모든 도움을 주셔서 감사합니다. 오류를 찾았고 문제가 해결되었습니다. Stoploss를 사용하지 않기 때문에 OrderStopLoss()의 값은 항상 0입니다. 0은 항상 Bid-TrailingStop*Pip보다 작기 때문에 구매 주문을 수정할 때 문제가 되지 않습니다. 그러나 매도 주문 0은 Ask+Trailingstop*Pip보다 클 수 없습니다. 그래서 이 줄에 or(|| OrderStopLoss()) 를 추가해야 했습니다.
if (OrderType()==OP_SELL){
if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
if ((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){
if (OrderStopLoss()>Ask+(TrailingStop*Pip) || OrderStopLoss()== 0 ) { //Added OrderStopLoss()==0if (OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red))
도움을 주셔서 대단히 감사합니다. 예, 일부 차트에서만 작동하기 때문에 OrderSelect에는 확실히 문제가 있습니다. 다른 문제는 거래가 수동으로 이루어지기 때문에 MagicNumber를 포함할 수 없다는 것입니다. 관련성이 있다고 생각되는 코드 부분을 사용했지만 컴파일할 수 없습니다. 다음 오류가 표시됩니다.
'MySelect' - 전역 범위에서만 함수를 선언할 수 있습니다.후행_v26.mq43113
31번째 줄은 다음과 같습니다.
bool MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES){
전체 EA는 다음과 같습니다.
#property strict ;
externint TrailingStart= 10 ;
externint TrailingStop= 5 ;
double stoplevel=(MarketInfo( Symbol (),MODE_STOPLEVEL))/ 10 ;
int TS=TrailingStart-TrailingStop;
bool MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES);
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int init(){
if (TS<stoplevel){
MessageBox ( "Please note: Your inputs for TrailingStart and/or TrailingStop cannot" +
"\nbe less than the minimum levels required by your broker and the" +
"\nTrailingStart has been increased automatically to " + StringConcatenate (stoplevel+TrailingStop)+ " pips" );
}
return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int deinit(){
return ( 0 );
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){
double Pip= Point * 10 ;
if (TS<stoplevel) TrailingStart=( int )stoplevel+TrailingStop;
bool MySelect( int iWhat, int eSelect, int ePool=MODE_TRADES){
if (! OrderSelect (iWhat, eSelect, ePool)) return ( false );
if (OrderSymbol() != _Symbol ) return ( false );
if (ePool != MODE_HISTORY) return ( true );
return (OrderType() <= OP_SELL);
}
for ( int i = OrdersTotal ()- 1 ; i >= 0 ; i--)
if (MySelect(i, SELECT_BY_POS)){
for ( int iPos=OrdersHistoryTotal()- 1 ; iPos >= 0 ; iPos--)
if (MySelect(iPos, SELECT_BY_POS, MODE_HISTORY)){
int nextTkt = OrderTicket();
if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
if ((Bid-OrderOpenPrice())>(TrailingStart*Pip)){
if (OrderStopLoss()<Bid-(TrailingStop*Pip)){
if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(TrailingStop*Pip),OrderTakeProfit(),Blue))
Print ( "Buy = " , GetLastError ());
return ( 0 );
RefreshRates();
}
}
}
}
if ( OrderSelect (OrderTicket(),SELECT_BY_TICKET)){
if ((OrderOpenPrice()-Ask)>(TrailingStart*Pip)){
if (OrderStopLoss()>Ask+(TrailingStop*Pip) || OrderStopLoss()== 0 ){
if (OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(TrailingStop*Pip),OrderTakeProfit(),Red))
Print ( "Sell = " , GetLastError ());
return ( 0 );
RefreshRates();
}
}
}
}
return ( 0 );
}
//+------------------------------------------------------------------+
실시간이 아닙니다.
정보를 주셔서 감사합니다. "OrderClosePrice()"가 버퍼링되었음을 알지 못했습니다. 그래서 "OrderClosePrice()"도 "Ask"/"Bid"도 이상적인 실시간 솔루션이 아니라고 생각합니다.
그러나 "OrderSelect()"가 만들어진 후 "Ask"/"Bid"를 사용하는 것보다 "OrderClosePrice()"가 더 나은 전체 솔루션이라는 데 동의하십니까?
그리고 실시간 솔루션의 경우 실제로 필요한 경우 대안으로 대체할 수 있습니다.
왜 바퀴를 다시 발명하려고 합니까?
여기 를 보세요. 필요한 모든 것을 찾을 수 있습니다.
소스 코드 수정을 시작하지 않는 경우.
지금까지 모두의 도움에 감사드립니다. 이제 오류 130 문제를 해결했다고 생각하지만, 내 OrderSelect 함수 에 심각한 문제가 있습니다. 이 기능이 가끔 일부 주문만 수정하는 이유일 가능성이 큽니다. 아래는 제가 인쇄한 목록입니다. OrderTicket #이 완전히 잘못되었습니다. 그 티켓 번호는 내가 EURAUD에 대해 개설한 거래에 속합니다. 모든 결과를 포함하지는 않았지만 실제로 OrderTicket 번호가 거래 터미널의 쌍과 일치하지 않는 여러 쌍이 있습니다.
누군가 보시고 OrderSelect에 무엇이 문제인지 알려주시겠습니까? 고맙습니다
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: ticket = 0 나는 그 티켓이 OrdersTotal과 같은 값을 인쇄해야 한다고 생각하므로 내 카운터가 작동하지 않는 것 같습니다.
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: OrderSelect = true
2016.04.18 16:04:38.602 Trailing_v19 EURUSD,M15: 주문 합계 = 11
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbypos = 0
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: Selectbyticket = 1
2016.04.18 16:04:38.202 Trailing_v19 EURUSD,M15: 주문 티켓 = 50213357
안녕하세요 여러분. 모든 도움을 주셔서 감사합니다. 오류를 찾았고 문제가 해결되었습니다. Stoploss를 사용하지 않기 때문에 OrderStopLoss()의 값은 항상 0입니다. 0은 항상 Bid-TrailingStop*Pip보다 작기 때문에 구매 주문을 수정할 때 문제가 되지 않습니다. 그러나 매도 주문 0은 Ask+Trailingstop*Pip보다 클 수 없습니다. 그래서 이 줄에 or(|| OrderStopLoss()) 를 추가해야 했습니다.
도움을 주셔서 대단히 감사합니다. 예, 일부 차트에서만 작동하기 때문에 OrderSelect에는 확실히 문제가 있습니다. 다른 문제는 거래가 수동으로 이루어지기 때문에 MagicNumber를 포함할 수 없다는 것입니다. 관련성이 있다고 생각되는 코드 부분을 사용했지만 컴파일할 수 없습니다. 다음 오류가 표시됩니다.
'MySelect' - 전역 범위에서만 함수를 선언할 수 있습니다. 후행_v26.mq4 31 13
31번째 줄은 다음과 같습니다.
전체 EA는 다음과 같습니다.
예, 일부 차트에서만 작동하기 때문에 OrderSelect에는 확실히 문제가 있습니다. 다른 문제는 거래가 수동으로 이루어지기 때문에 MagicNumber를 포함할 수 없다는 것입니다. 관련성이 있다고 생각되는 코드 부분을 사용했지만 컴파일할 수 없습니다.
구축할 수 있는 완벽하게 좋은 스켈레톤 코드를 주었습니다. 이 코드는 문제를 수정하고 그 이전에 나열하기도 했지만 무시하고 코드가 원하는 대로 되지 않는 이유에 대해 계속 고민하고 있습니다!
왜요? 코드가 작동하지 않기를 원하십니까? 예제를 사용하고 직접 테스트하십시오!