[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 113

 
IgorM:

A volte ci sono calcoli complessi o il caricamento della storia in init(), o ci sono un sacco di indicatori e Expert Advisors appesi al terminale o...

ma se il terminale interrompe il codice durante la sua inizializzazione, il seguente errore apparirà nel log: ".... timeout in esperto ...."

Se il log non mostra alcun errore nel terminale, significa che l'inizializzazione ha avuto successo. La funzione start() stessa è facile da controllare - scrivere nella prima linea start(): Print("new tick");


Ho fatto così(((.

int start()
  {
  Print("start");
  
/*current_values_from_MT(CUR, CUR_BUF);
current_values_from_MT(MAIN, MAIN_BUF);*/

  


   return(0);
  }

Sì, dondolando un sacco di informazioni, anche i calcoli, sperimentando con le zecche...

Il calcolo dura 2 - 3 minuti, MT "non si blocca", tutto funziona tipicamente, i messaggi di Print() e Alert vengono visualizzati e poi tutto))

Guardando tutti i messaggi di MT, non ho trovato alcun errore...

Si prega di assistere.

 
BBSL:

Il calcolo dura 2 - 3 minuti, MT non si "blocca", tutto funziona tipicamente, vengono visualizzati i messaggi Print() e Alert e poi tutto))

se Print() viene stampato, start() funziona sicuramente, ma sono confuso dalla tua affermazione che il calcolo richiede 2-3 minuti - con un tale carico sul terminale è necessario interrompere i calcoli usando la funzione sleep() altrimenti il terminale si blocca definitivamente.

Poiché MT4 non ha un debugger, inserite Print() nelle sezioni di codice discutibili e catturate le sezioni di codice e le condizioni che hanno fallito o non hanno fallito.

 
Ho bisogno di fissare il fatto di far scattare gli ordini aperti da TakeProfit o StopLoss, e i valori di TakeProfit e StopLoss non mi interessano.
 
Jaguar1974:

Come posso controllare se un ordine è attivato da TakeProfit o StopLoss? Grazie per la vostra risposta!

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}
Familiarizzate con il codice di entrambe le funzioni e fondetele in una sola per ottimizzare la velocità di esecuzione e per i vostri compiti specifici...
 
eddy:
Sayod ,su quale timeframe hai fatto trading e con quali parametri?


Qual è la differenza o hai invertito e vuoi testarlo?

Commercializzato su h1 per impostazione predefinita,

Pip passo - 30

LotExpo - 1.59

Penso che i parametri non abbiano troppa importanza se l'idea è stata implementata, penso che l'Expert Advisor andrà bene con qualsiasi parametro, IMHO.

 
Jaguar1974:
Ho bisogno di impegnare il fatto che gli ordini aperti si attivino con TakeProfit o StopLoss. Non mi interessano i valori reali di TakeProfit e StopLoss.

Se vuoi solo registrare il fatto che l'ordine è scattato, allora puoi memorizzare il numero di ordini sul tick precedente e confrontarlo con il numero di ordini sul tick successivo - se il numero di ordini è cambiato, significa ....
 
kiimar:
Il terminale ha chiuso l'ordine perdente con il commento "so:19.5%/28.4/145.8". Cosa significa questo?
Significa che quando il livello di margine libero del 19,5% è stato raggiunto, si è verificato uno stopout e il trade perdente è stato chiuso secondo le regole.
 
IgorM:

se Print() stampa, allora sicuramente hai start() funzionante, ma sono confuso dalla tua affermazione che il calcolo richiede 2-3 minuti - a un tale carico del terminale è necessario interrompere i calcoli utilizzando la funzione sleep(), altrimenti il terminale si bloccherà definitivamente

Poiché MT4 non ha un debugger, inserite Print() nelle sezioni di codice dubbie e catturate le sezioni di codice e le condizioni che hanno fallito o non hanno fallito.


Scusa, ho sbagliato, Print funziona solo in init. Non riesco a entrare in start))

Sì, alla fine di ogni funzione, ho messo la stampa con un messaggio su di essa, per controllare se tutto è ok. E tutti i messaggi (tutte le funzioni) hanno funzionato al 100% fino alla fine dell'init, non posso andare all'inizio!

Grazie in anticipo per la risposta!

 
Grazie, ho ancora molto da imparare.
artmedia70:
Familiarizzate con il codice di entrambe le funzioni e fondetele in una sola per ottimizzare la velocità di esecuzione e per i vostri compiti specifici...
 
BBSL:


Scusa, mi sono espresso male, Print funziona solo in inite. Non riesco a entrare in start))

Sì, alla fine di ogni funzione, inserisco una stampa con un messaggio su di essa per controllare se tutto è ok. E tutti i messaggi (tutte le funzioni) hanno funzionato al 100% fino alla fine dell'init, non posso andare ad iniziare!

Grazie in anticipo per la risposta!

Quindi francamente non hai una zecca nel terminale. Cioè o non è connesso, o stai lavorando su un grafico offline, o controlla IsExpertEnabled() nell'init e se non è permesso, allora abilita gli EA.