[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 589

 

Sto diventando madre davanti ai miei occhi! (cioè diventare una matriarca!) :))

Ecco un'altra cosa che è successa.

Se modificavo un ordine, la finestra di notifica si apriva dopo informandomi che l'ordine era stato modificato con successo. Inoltre, se disabilito l'EA dopo l'apparizione di quella finestra, dopo aver premuto OK nella finestra del messaggio, l'EA RIPARTE SEMPRE le sue azioni (chiusura di una posizione, in questo caso). La cosa interessante è che l'EA non c'è più, ma i suoi comandi vengono ancora eseguiti!

Ho dovuto pensare un po' e rimuovere la linea

message=message+"Errore di modifica dell' ordine #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n"

Dopo di che tutto è andato come doveva. nessuna finestra... tutto si apre e si chiude... apre e chiude... apre e chiude...

:))))))))))))

P.S.

ma se si rimuove

OrderPrint(); 

continuare;

non c'è nessun cambiamento ... stessa cosa con la linea

if(ret==IDOK) return(0);

che ci sia o no - nessun cambiamento!

perché è così?

 
lottamer:


Perché?

se l'ordine non si è aperto - cosa modificherete?

lottatore:

ed è possibile controllare My_buy (variabile non booleana) per TRUE-FALSE ?

allora CHI è il PRAGRAMMATORE DI BOOCH qui?! si può sempre fare un booleano da un "non booleano"!!!

lottatore:

la modifica va incondizionatamente - l'ordine è aperto - devi impostare gli stop-stakes...

è a questo che serve il controllo del fatto che l'ordine è APERTO.

Avete coraggiosamente fatto il passo successivo nella vostra conoscenza della lingua - avete familiarizzato con il funzionamento delle librerie:

#include <WinUser32.mqh>

questa è la libreria - quella standard della consegna MetaTrader. La gente scrive le proprie librerie (personalizzate). Un esempio di libreria contenente funzioni di ordine commerciale. Queste funzioni sono scritte una volta sola e poi utilizzate nei loro codici come necessario.

 
sergeev:
Allora perché l'hai messo dentro le parentesi { } if (medie incrociate per esempio)?


quindi sarebbe lì.

Dove pensi che possa essere inserito? solo immediatamente dopo l'apertura di un ordine.

 
lottamer:

Sto diventando madre davanti ai miei occhi! (cioè diventare una matriarca!) :))

perché?

Devo solo cercare "Cos'è MessageBox()? - tramite Ctrl+F1 in MetaEditor.
 
TarasBY:

se l'ordine non si aprisse - cosa modifichereste?

quindi CHI è il PRAGRAMMATORE BOH qui?! si può sempre fare un booleano da un "non booleano"!!!

Ecco a cosa serve il controllo del mandato OPEN.

Avete coraggiosamente fatto il passo successivo nell'apprendimento della lingua: familiarizzare con il funzionamento delle biblioteche:

questa è la libreria - quella standard della consegna MetaTrader. La gente scrive le proprie librerie (personalizzate). Un esempio di libreria contenente funzioni di ordine commerciale. Queste funzioni sono scritte una volta sola e poi usate nei vostri codici come necessario.


Se l'ordine non si è aperto, non può essere modificato, perché non c'è nulla da modificare. Non ho ancora finito di scrivere tutto l'EA, lo scrivo a blocchi e lo controllo subito, poi lo finisco e lo ricontrollo. Ma non credo che se un'operazione non si apre, allora EA sarà completamente disabilitata, perché non saprà cosa fare - c'è un ordine da modificare e non c'è nessuna posizione aperta. :))) si aprirà sui prossimi ticks...e poi si modificherà

2)BOH qui sei unico, perché io, un peccatore, non capisco nemmeno come così Booleano-innon-Booleano... Cioè c'è una funzione utilizzabile e diciamo che è stata eseguita, cioè la posa si è aperta. Così ora la macchina capirà che la mia funzione utilizzabile è ora VERA, perché è stata eseguita? ..... scusa se non conosco la domanda

3) vedere 1

4)#include è un argomento su cui sono troppo imbarazzato per chiedere!

Ho capito bene, che teoricamente, diciamo, dai miei script CLOSE_ALL e MODIFY, si può fare un#include al posto di una funzione personalizzata e fare riferimento ad essa.

ma come potrei inserire questo#include My_buy dopo la condizione if?

 
TarasBY:
Si tratta solo di cercare "Cos'è MessageBox()?". - tramite Ctrl+F1 in MetaEditor.

questa è una sfumatura...e vorrei finire l'Expert Advisor ora... :))
 

qualcuno sa del rollover?

Quando gli ordini vengono riaperti con il rollover, ci possono essere degli slittamenti per i valori di stop e takeout? E come sarà impostato lo stop se dopo il rollover la differenza tra il prezzo aperto e lo stop sarà inferiore allo stop leveleller?

Il mio compito è il seguente. Se ho un ordine a mercato aperto, dovrei controllare se è stato aperto con rollover e se lo è stato, dovrei ottenere il ticket dell'ordine precedente, che è stato chiuso. Forse qualcuno mi dirà l'algoritmo di ricerca? Attualmente sto facendo quanto segue:

1. Seleziono il primo ordine aperto.
2. Se è stato aperto dalle 23:40 alle 00:20, allora continuo a controllare ulteriormente questo ordine (la finestra di 40 minuti viene presa per sicurezza, anche se in teoria si potrebbe prendere dalle 23:50 alle 23:59)
3. Ricordo il ticket, lo stop e il take price
4.Controllo tutti gli ordini chiusi sulla storia, e i commenti contengono la parola "swap" e le coppie di valute corrispondono

5. Confronto i dati su stop e takeover, se corrispondono, ecco la coppia di ordini richiesta, se no - torno al passo 1

 

Per favore, ditemi cosa si intende per

mentre(vero)

nello script del modificatore che ho incollato nell'EA?

e cos'è questo strano controllo per

if(cmd==OP_BUY || cmd==OP_SELL) ?

Non sarebbe meglio controllare solo la presenza di una posizione aperta?

int My_modify ()
 {
//      bool   result;
//      double stop_loss,take_profit,point,bid,ask, lotsize;
//      int    cmd, total, error, spread;
//      string message;
//----
   total=OrdersTotal();

//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         bid= MarketInfo(OrderSymbol(),MODE_BID);
         ask= MarketInfo(OrderSymbol(),MODE_ASK);
         spread=MarketInfo(OrderSymbol(),MODE_SPREAD);     
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
          {
            //---- modify first market order
            while(true)
             {
                if(cmd==OP_BUY){
                        string type = "buy";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()-StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()+TakeProfit*point;
                }
                     
                else{
                        type = "sell";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()+StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()-TakeProfit*point;
                }   
                result=OrderModify(OrderTicket(), OrderOpenPrice(), stop_loss, take_profit, 0, CLR_NONE);
                if(result!=true) { error=GetLastError(); Print("LastError = ",error);}
                else {error=0;}
                if(error==135) RefreshRates();
                else break;
              }
                if(error==0){
                        //message=message+"Ордер #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+" успешно модифицирован.\n";
                        }
                        else{
                                if(error == 130){string error_desc = " - Неправильные стопы";} else error_desc = "";
                                if(error != 1)
                        message=message+"Ошибка модификации ордера #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n";
                        }

              //---- print modified order (it still selected after modify)
              OrderPrint();
              continue;             
           }
        }
      else { Print( "Error when order select ", GetLastError()); break;}
     }
        int ret=MessageBox(message, NULL, MB_OK);
        if(ret==IDOK) return(0);
//----
   return(0);
  }
 
lottamer:

Questa è una sfumatura ... e ora vorrei finire il consigliere ...:))

Si vuole "spostare il carrello" per "il naso di Kucher". Con un basso livello di competenze linguistiche, è necessario iniziare a praticare con:

Prendete un Expert Advisor già funzionante, che è vicino alla vostra strategia e modernizzatelo secondo le vostre esigenze - così sarà più veloce capire e comprendere le vostre azioni (nell'ovvia assenza del desiderio di leggere "The Primer").

Buona fortuna!

P.S. AXIOMA: "I cocchieri non vanno sui carri!!!"

 
TarasBY:

Si vuole "spostare il carrello" per "il naso di Kucher". Con un basso livello di competenze linguistiche, è necessario iniziare a praticare con:

Prendete un Expert Advisor già funzionante, che sia vicino alla vostra strategia e aggiornatelo per soddisfare le vostre esigenze - in questo modo capirete e comprenderete le vostre azioni più velocemente.

Buona fortuna!

P.S. AXIOMA: "I cocchieri non guidano i carri!!!"


Praticamente lo faccio... Guardo altri EA, script... e costruisco quello che mi serve :))
Motivazione: