bool IsOrderType( int type)
{
switch (type)
{
case OP_BUY:
case OP_SELL:
case OP_BUYLIMIT:
case OP_SELLLIMIT:
case OP_BUYSTOP:
case OP_SELLSTOP:
return ( true );
}
return ( false );
}
아, 그건 그렇고- 테스터에서 작업의 합리적인 최적화-최근에 사용하기 시작했습니다.
int FindLastOpenTime( int tip, int imagic)
{
int Res=- 1 ;
int lOrderOpenTime=- 1 ;
for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
{
if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
if (OrderSymbol() != Symbol ()) continue ;
if (OrderMagicNumber() != imagic) continue ;
if (!(tip==- 1 || isOrderType(tip))) continue ;
if (IsTesting()) return (OrderTicket()); // тутif (lOrderOpenTime==- 1 ) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
} elseif (lOrderOpenTime<OrderOpenTime()) {
lOrderOpenTime=OrderOpenTime();
Res=OrderTicket();
}
}
return (Res);
}
그건 그렇고, 함수는 FindLastOpenTime이라고 하며 티켓을 반환합니다.
이대로가 더 좋지 않을까요?
datetime FindLastOpenTime( int tip, int imagic, int & ticket)
{
//...
}
if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ; if (OrderSymbol() != Symbol ()) continue ; if (OrderMagicNumber() != imagic) continue ; if (!(tip==- 1 || isOrderType(tip))) continue ;
도움말 보기:
계속 문은 가장 가까운 외부 while 또는 for 루프 문의 시작 부분으로 제어를 전달하여 다음 반복이 시작되도록 합니다. 이 문은 break 문과 반대입니다.
전혀 불명확한데, 조건대로 주문이 통과되지 않으면 어쩌지? 루프 출구? op 계속이 op break의 정반대인 경우 ...
저에게는 표준 논리가 더 눈에 띄고 이해하기 쉽습니다.
int FindLastOpenTime( int type, int imagic){ int time = 0 ;
for ( int i = OrdersTotal () - 1 ;i>= 0 ;i--){
if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)){
if (OrderSymbol()== Symbol ()){
if (OrderType()==type){
if (OrderMagicNumber()==magic){
if (OrderOpenTime()>time){
time=OrderOpenTime();
}
}
}
}
}
}
return (time);
}
Victor, IMHO 스위치가 더 빠르고 시각적으로 더 좋습니다.
아, 그건 그렇고- 테스터에서 작업의 합리적인 최적화-최근에 사용하기 시작했습니다.
그건 그렇고, 함수는 FindLastOpenTime이라고 하며 티켓을 반환합니다.
이대로가 더 좋지 않을까요?
Victor, IMHO 스위치가 더 빠르고 시각적으로 더 좋습니다.
실제로는 더 눈에 띕니다.
TheXpert :
그건 그렇고, 함수는 FindLastOpenTime이라고합니다 ...
if (lOrderOpenTime<OrderOpenTime()) { lOrderOpenTime=OrderOpenTime(); Res=OrderTicket(); }
-1에서 바로 작동을 시작할 수 있습니다. 외부 if...else는 여기에서 그 이유가 완전히 명확하지 않습니다. IMHO를 반환하는 것이 lOrderOpenTime보다 훨씬 낫습니다. 그런 다음 -1을 반환하면 오류를 감지할 수 있습니다.이런 종류를 사용하는 것이 논리적입니까?
순환 피연산자의 구성과 같은 논리에 의해 항상 죽임을 당합니다.
if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
if (OrderSymbol() != Symbol ()) continue ;
if (OrderMagicNumber() != imagic) continue ;
if (!(tip==- 1 || isOrderType(tip))) continue ;
도움말 보기:
계속 문은 가장 가까운 외부 while 또는 for 루프 문의 시작 부분으로 제어를 전달하여 다음 반복이 시작되도록 합니다. 이 문은 break 문과 반대입니다.
전혀 불명확한데, 조건대로 주문이 통과되지 않으면 어쩌지? 루프 출구? op 계속이 op break의 정반대인 경우 ...
저에게는 표준 논리가 더 눈에 띄고 이해하기 쉽습니다.
구멍 번호 2. 논리(논리성)와 간결성은 약한 상관관계가 있습니다.
그런데 많은 사람들이 사용을 경멸하지 않는 MQL의 생생한 예입니다.
이것은 논리가 아닙니다. 이것은 살인입니다. 또한 암시적 버그의 잠재적 온상입니다.
펑크가 난 곳을 이해하지 못합니까? 그리고 왜 두 번째인가? 이것이 두 번째라면 첫 번째는 어디에 있습니까?
또한 사무실이나 우편번호가 없는 특히 수완이 있는 사람들을 위한 것입니다.
dima는 metaeditor.exe가 없는 사람들을 위해 뭔가를 추가하세요 :-)
빅터, 다시 한 번 축하합니다!