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

 
Beowulf:
Potete suggerirmi qualche letteratura per iniziare a creare il mio EA! O è qualcosa che i semplici mortali non possono fare? )))
Noi (semplici mortali) non possiamo farlo! ;)))
 
lottamer:


1) è comprensibile

2) ho appena controllato... in Alpari non si può impostare stop e take all'apertura. solo attraverso la modifica successiva... costi di non-dealing-desk

3) c'è una strategia.


Allora è semplice come hai suggerito tu. Dopo la modifica, si imposta una casella di controllo e si controlla il suo stato prima della modifica.Questo se c'è un ordine. Se ce n'è più di uno, dovete contabilizzare voi stessi gli ordini. Come farlo è nella sezione degli articoli.
 
TarasBY:
Noi (semplici mortali) non lo capiamo! ;)))



Leggerò un po' del mio vuoto ))))
 

Potete consigliarmi, quando gli ordini vengono riaperti usando il rollover, è possibile lo slippage 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 è inferiore allo stop livellato?

Il mio compito è il seguente. Se ho un ordine a mercato aperto, dovrei controllare se è stato aperto con il 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 sullo storico, dove i commenti contengono la parola swap e le coppie di valute corrispondono
5. Confronto i dati su stop e takeover, se corrispondono, allora ecco la coppia di ordini richiesta, se no, torno al passo 1

 

La risposta è stata trovata (personalmente), ma lascio il post per la storia! :))))

----------------------------------

ma ecco la cosa interessante...

Ho uno script (l'ho preso online) che modifica un ordine aperto.

La mia idea era di prenderla nel suo insieme, e inserirla nel mio Expert Advisor come una funzione definita dall'utente, e chiamarla ogni volta che fosse necessario.

Il problema è che il compilatore dà errore "'MB_OK' - variabile non definita G:\Program_Files_2\MT4-demo\experts\33.mq4 (153, 37)" - 3° linea dalla fine

Ma se si compila lo script stesso, tutto è chiaro!

Ho capito cos'è MV_OC... ma non capisco perché funziona nello script, ma si lamenta nell'Expert Advisor?

//+------------------------------------------------------------------+
//|                                               Изменить стопы.mq4 |
//|                                                          Мефодий |
//|                                                    ppc-2@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Мефодий"
#property link      "ppc-2@mail.ru"
#include <WinUser32.mqh>

extern  int  StopLoss = 500; 
extern  int  TakeProfit = 500;

// #property show_confirm
// #property show_inputs

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

int start()
  {
        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);
  }
//+------------------------------------------------------------------+
 

Si scopre che la linea #include <WinUser32.mqh> deve essere presente.

e questo file è in include

 

permettetemi di vantarmi...

non hai bisogno di nessuna bandiera quando modifichi.

è sufficiente sotto condizione if (cross-means per esempio)... prendere il riferimento per usare la funzione BUY e MODIFY tra parentesi {}

e in questo modo, la condizione si propagherà ad entrambe le azioni :))

come questo

{My_buy ();

My_modify (); }

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

 

lottamer:

come questo

{My_buy ();

My_modify (); }

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

Un'interpretazione così libera del codice del programma deve essere chiarita:

    if (условие == true)
    {
        if (Tvoi_buy() == true)  // как вариант
        {Tvoi_Modify();}
    }
:)))
 
TarasBY:

Un'interpretazione così libera del codice del programma richiede un chiarimento:

:)))


Perché?

e My_buy (una variabile non booleana) può essere controllata per TRUE-FALSE ?

La modifica va di sicuro - l'ordine è aperto - dobbiamo impostare gli stop-stocks...

 
lottamer:

la modifica è in corso di sicuro - l'ordine è aperto - devi impostare gli stop-steak...

Allora perché l'hai messo tra parentesi { } if (medie incrociate per esempio)?
Motivazione: