2016-09-07 4 views
0

LI는 MQL4 Expert Adviser를 통해 http 요청을 보내고 개인 EA 로직을 위해 수정 한 코드를 발견했습니다.MQL4 Expert Adviser를 통해 HTTP 요청을 보내는 방법은 무엇입니까?

기술적으로는 작동하지만 큰 문제가 있습니다. 모든 틱에서 요청을 보냅니다. 각 신호마다 하나의 요청으로 변경해야합니다.

제발 도와주세요!

코드 예 :

#import "shell32.dll" // -------------------------------<BegOfImport>-section 

int ShellExecuteW(int hwnd, 
        string lpOperation, 
        string lpFile, 
        string lpParameters, 
        string lpDirectory, 
        int nShowCmd 
        ); 

#import // "shell32.dll" // -------------------------------<EndOfImport>-section 


if ( A > B 
    && 1 > OrdersTotal() 
    ) 
{ 
    if ( OrderSend(Symbol(), OP_SELL, 1, Bid, 10, 0, 0, 0, 0, 0, clrGreen) 
     ) 
     OrderSelect(0, SELECT_BY_POS, NULL); 
    ShellExecuteW(0, "open", linkS, "", "", 1); 
    } 

답변

0

어떻게 거래에 대해?

EA는 모든 틱에서 거래 요청을 보내나요? 각에 확인해야 어쩌면 생각 -

현재 그것은 (보장되지 않으므로, 즉 requote 또는 미끄러짐 또는 시장 폐쇄/거래 장애인 등) 거래는 각각의 새로운 신호에 필요한 경우

를 보내려고 새 바를 사용하거나 최근 거래 방향을 메모리 또는 메모리에있는 최근 신호 시간으로 유지하십시오. 이러한 경우에

void OnTick(){ 
    if ( A > B && OrdersTotal() < 1){ 
     int ticket = OrderSend(Symbol(),OP_SELL,1,Bid,10,0,0,0,0,0,clrGreen); 
     if ( ticket > 0){ // this means ticket is opened successfully, OrdersTotal = 1 
       if ( OrderSelect(0, SELECT_BY_POS)) { } // for what??? 
     ShellExecuteW(0, "open", linkS, "", "", 1); 
     } 
    } 
} 

, ticket가 열릴 경우, 다음 ShellExecute() 다른 경우에,라고 - 없습니다.

OrderSelect()ticket, 이유는 아마도 stoplosses입니다. 이 경우 거부 이유

어쨌든 당신은 또한

int ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 10, 0, 0, 0, 0, 0, clrGreen); 
if ( ticket > 0){ 

}else{ 
    int error = GetLastError(); 
    Print(" failed to send. error#", error); 
} 
밖으로 찾아야한다