Domande da un "manichino" - pagina 166

 
Alphazavr:

Cosa c'è di sbagliato nel codice. Perché gli errori"failed cancel order #0 buy 0.00 at market [Invalid request]" continuano ad apparire

Dov'è la selezione della posizione?

Cosa c'entrano gli ordini con le transazioni?

cosa stai cercando di fare? chiudere una posizione?


e il nome order_remove_mql_trade_request è un brutto sogno.

 
sergeev:

dov'è la selezione della posizione?

cosa hanno a che fare gli ordini con le transazioni?

Cosa stai cercando di fare comunque? Chiudere una posizione?


e il nome order_remove_mql_trade_request è un brutto sogno.

Sì, ho bisogno di chiarire.

Lo scopo del codice - se c'è una posizione aperta, allora cancella tutti gli ordini limite della stessa direzione della posizione.

per esempio, se una posizione è aperta BAY. allora cancella tutti gli ordini come buy limit

Ho dimenticato di selezionare la posizione =). Beh, l'errore non viene da quello (controllato).

 
Alphazavr:

Cosa c'è di sbagliato nel codice. Perché continuano ad apparire gli errori"failed cancel order #0 buy 0.00 at market [Invalid request]"?


   MqlTradeRequest order_remove_mql_trade_request = {0};
   order_remove_mql_trade_request.action = TRADE_ACTION_REMOVE;

   i = OrdersTotal();
   if(i > 0){
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 <= i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


rimuovete queste uguaglianze.
 
sergeev:
rimuovere quei segni uguali.
L'ho già fatto, non funziona. Non so dove sia l'errore. Inoltre, non capisco perché questi errori sono solo con gli ordini BAY LIMIT, non ci sono errori con i Sell Limits.
 
Alphazavr:
L'ho già fatto, non funziona.
Non è bene tradire gli anziani.
 
sergeev:
Non è bene tradire gli anziani.

Non è bene imbrogliare, io non lo faccio.


Ho appena ricontrollato tutto con questo codice:

   i = OrdersTotal();
   if(i > 0){
      PositionSelect(_Symbol);
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}
      if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL){
         for(i2 = 0;i2 < i;i2++){
            ul = OrderGetTicket(i2);
            OrderSelect(ul);
            if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_LIMIT){
               order_remove_mql_trade_request.order = ul;
               OrderSend(order_remove_mql_trade_request,mql_trade_result);}}}}


Il risultato è lo stesso. l'errore di cui sopra si verifica spesso

 
Alphazavr:

il risultato è lo stesso. l'errore si verifica spesso

"spesso" è una frase vuota.

Pensi che 2+2 sia spesso uguale a 4?

non essere pigro - fai un'analisi dell'invio e un'analisi dell'errore restituito.

controllare cosa stai cercando di rimuovere?

ci sono ordini disponibili al momento della chiusura?

forse stai cercando di cancellare un ordine che è già stato cancellato.


In terzo luogo, chi vi ha insegnato a chiudere gli ordini in modo che pensiate di poter chiudere tutti gli ordini? Pensate che dopo ogni vostra chiusura, l'OrdersTotal diminuirà di 1. E continuate a battere il vostro i2++ fino alla vittoria, fino alla i primaria.

Non si preoccupa nemmeno di controllare se OrderGetTicket o OrderSelect restituisce un errore

male, molto male.

È a causa di tali penne che i nostri satelliti escono dall'orbita.

 
sergeev:

"spesso" è una frase vuota.

Pensi che 2+2 sia spesso uguale a 4?

non essere pigro - fai un'analisi dell'invio e un'analisi dell'errore di ritorno.

controllare cosa stai cercando di cancellare?

ci sono ordini disponibili al momento della chiusura?

forse stai cercando di cancellare un ordine che è già stato cancellato.


In terzo luogo, chi vi ha insegnato a chiudere gli ordini in questo modo? Voi pensate di passare tutti gli ordini, ma non è così. Dopo ogni vostra chiusura, OrdersTotal diminuisce di 1. E voi continuate a battere il vostro i2++ fino alla vittoria, fino alla i primaria.

Non si preoccupa nemmeno di controllare se OrderGetTicket o OrderSelect restituisce un errore

Questo è male, molto male.

È a causa di tali penne che i nostri satelliti escono dall'orbita.

Ero sicuro che non fosse quello, altrimenti ci sarebbero stati errori nel test non solo con i bylimits, ma anche con i selllimits. Grazie per aver cercato di aiutarmi e guidarmi.

 

Saluti signori.

Questo è un prototipo di una funzione di Windows che emula la pressione di un tasto:

VOID WINAPI keybd_event(__in  BYTE bVk,               // Тип BYTE, занимает 1 байт
                        __in  BYTE bScan,             // Тип BYTE, занимает 1 байт
                        __in  DWORD dwFlags,
                        __in  ULONG_PTR dwExtraInfo
);

Il fatto è che questa funzione è chiamata in MT4 con int invece di byte. Sembra così:

void keybd_event(int bVk,                 // Тип int, занимает 4 байта
                 int bScan,               // Тип int, занимает 4 байта
                 int dwFlags,
                 int dwExtraInfo);
Qual è il problema? Sta trasferendo almeno 4 byte? Dipende dall'hardware?
 
220Volt:

Saluti signori.

Questo è un prototipo di una funzione di Windows che emula la pressione di un tasto:

Il fatto è che questa funzione è chiamata in MT4 con int invece di byte. Sembra così:

Qual è il problema? Sta trasferendo almeno 4 byte? Dipende dall'hardware?

Quando si passano parametri a una funzione, il quantum minimo è un intero a 32 bit. Cioè, bVk e bScan nel vostro caso saranno convertiti al tipo int prima di essere passati nella funzione

Ecco perché i prototipi di funzione dati sopra non si contraddicono

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5