[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 311

 

Domanda sul funzionamento del tester: dopo avereseguito un test, si cambiano i parametri (date, coppia di valute, timeframe), si esegue nuovamente il test - viene eseguito, ma quando è finito le informazioni nelle schede come "grafico" e "report" non cambiano affatto - tutto rimane dal test precedente. Anche il rapporto salvato risulta essere vecchio. Qual è la ragione e come risolvere il problema? Forse c'è qualche funzione per resettare i risultati?

Ho letto il manuale, gli articoli, ho cercato nel forum - non ho incontrato alcuna menzione di un tale problema...

 

Penso di dover utilizzare un file esterno per visualizzare l'indicatore in modo da poterlo utilizzare come Expert Advisor, non riesco a capire cosa sta succedendo.Credo di essere un po' stanco quando cerco di usare un file esterno, ma non so cosa c'è di sbagliato.

1) con il rapporto

Chi aiuterà a finire ciò che ha iniziato con quelli condividerà la strategia (crunch indicatore solo una parte della strategia, ma non meno importante). grad reale (non può per così tanto tempo fortunato, falciato solo la nostra energia e che non mettere un ciclo di arresto, fino ad allora, tutto va in aumento e si vede con quale progresso).

File:
 
ma ecco i pezzi di codice
File:
 

Puoi dirmi cosa c'è che non va? Quattro ordini di fila si modificano normalmente, ma al quarto tick inizia a scrivere OrderModify error 1.

Dopo un'inversione di tendenza, il primo ordine va bene, il secondo ordine si modifica normalmente, ma ancora una volta si scrive la stessa sciocchezza...

La normalizzazione non gioca un ruolo.

Ho lottato per diversi giorni!

   for (x=0;x<OrT;x++)
   {
   if (OrderSelect(x,SELECT_BY_POS)==true)
    {
     if (OrderMagicNumber() == magic)
      {
       if (OrderType = OP_BUY)
       {
       shift = iBarShift(Symbol(),30,OrderOpenTime());                           //запомнил свечу открытия
        for (m=shift;m>=1;m--)
        if (High[m]-OrderOpenPrice() >= TS*Point)
        {
         if (OrderOpenPrice()+spread*Point != OrderStopLoss())
         {
          OrderModify(OrderTicket(),OrderOpenPrice(),                           //переводит SL в безубыток
          OrderOpenPrice()+spread*Point,OrderTakeProfit(),0,CLR_NONE);
          return;
         }
        }
       }
      }
     if (OrderMagicNumber() == magic)
     {
      if (OrderType = OP_SELL)
      {
       shift = iBarShift(Symbol(),30,OrderOpenTime());                           //запомнил свечу открытия
        for (m=shift;m>=1;m--)
        if (OrderOpenPrice()-Low[m] >= TS*Point)
        {
         if (OrderOpenPrice()-spread*Point != OrderStopLoss())
         {
           OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),dig),     //переводит SL в безубыток
           NormalizeDouble(OrderOpenPrice()-spread*Point,dig),
           NormalizeDouble(OrderTakeProfit(),dig),0,CLR_NONE);
           return;
         }
        }
       } 
      }
    }
   }

Grazie in anticipo.

 
CYBOPOB:

Puoi dirmi cosa c'è che non va? Quattro ordini di fila si modificano normalmente, ma al quarto tick inizia a scrivere OrderModify error 1.

Dopo un'inversione di tendenza, il primo ordine è OK, il secondo lo modifica, ma mostra di nuovo lo stesso errore...

La normalizzazione non gioca un ruolo.

Ho lottato con questo per diversi giorni!

Grazie in anticipo.

O considerate le regole voi stessi (quando scrivete il codice), o usate soluzioni già pronte dove queste regole sono già prese in considerazione.
 
CYBOPOB:

Puoi dirmi cosa c'è che non va? Quattro ordini di fila si modificano normalmente, ma al quarto tick inizia a scrivere OrderModify error 1.

Dopo un'inversione di tendenza, il primo ordine va bene, il secondo ordine si modifica normalmente, ma ancora una volta si scrive la stessa sciocchezza...

La normalizzazione non gioca un ruolo.

Ho lottato per diversi giorni!

Grazie in anticipo.

Prima della modifica, devi controllare che il parametro dell'ordine stop non sia uguale al nuovo stop. Se sono uguali, non c'è niente da modificare. Quindi, errore 1.
 

Riguardo all'ordinamento degli array.
Sto cercando di ordinare due array: il primo in ordine crescente(funzione ArraySort(num_array);), e il secondo in base al primo, in modo che se il quinto elemento del primo array viene prima, allora il secondo array farà lo stesso (il quinto elemento viene prima).
Se c'è una funzione MQL per ordinare gli array insieme, per favore datemi il link.
Saluti. Shurkin.

 
artmedia70:
Prima di modificare, è necessario controllare che il parametro dell'ordine stop non sia uguale al nuovo stop. Se sono uguali, non c'è niente da modificare. Quindi, errore 1.


Non è così?

if (OrderStopLoss() != OrderOpenPrice()-spread*Point)

Artem, non considerarlo un problema, scrivi il codice, eh? O dammi quella cosa che hai in mano, finirò questo tormento...

 
CYBOPOB:

Non è così?

Artem, non considerarlo un problema, scrivi il codice, eh? O dammi quella cosa che hai in mano, finirò questo tormento...


Non quello. Te l'ho detto:

Prima di modificare, devi controllare che il parametro dell'ordine stop non sia uguale al nuovo stop. Se sono uguali, non c'è niente da modificare. Da qui l'errore 1.

 

Ho una domanda per i professionisti. Voglio rendere la funzione universale. La funzione conta quante barre di una caratteristica (rialzista o ribassista, corrispondente alla dimensione, forse qualcos'altro che aggiungo) si susseguono e se c'è una barra che non corrisponde a questa caratteristica, cioè puntata in un'altra direzione, il contatore viene azzerato.

Ecco un codice, dove sto calcolando in una delle varianti. Cioè se le barre di una caratteristica vanno verso l'alto, cioè verso il rialzo.

int LastCandlesType(int trend)
{
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

Come fare in modo che quando si passa il parametro di tendenza a questa funzione, che sarà responsabile del passaggio della presunta tendenza principale al momento, il calcolo sia basato su questo parametro.

Cioè, se trend == al ribasso, la funzione nel ciclo era come ora, e setrend == al rialzo, l' Open[i ] e il Close[i] erano scambiati nel ciclo, in modo che le condizioni fossero osservate. Perché in questo caso il prezzo di chiusura della barra sarà inferiore al prezzo di apertura e la differenza sarà meno.

Motivazione: