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

 
Tragedy:

Salve di nuovo a tutti.

Come fare un ritardo in un EA prima di aprire un nuovo trade dopo la fine di un trade precedente.

Cioè l'affare è finito t/p e dopo devo aspettare per esempio 15 minuti e solo allora la formula continuerà a funzionare:)

Trovato

OrderCloseTime( )
Ma come faccio a collegare questo al tempo del programma, e in modo che non ci sia conflitto con l'esecuzione dell'EA attraverso la storia. Grazie in anticipo


https://www.mql5.com/ru/forum/131859

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

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, 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();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
 
Prompt:) Grazie
 
rigonich:

int iHighest( stringa simbolo, int timeframe, int tipo, int count=WHOLE_ARRAY, int start=0)
Restituisce l'indice del valore più alto trovato (offset rispetto alla barra corrente).
Parametri:
Il valore viene restituito comevalore della barra più alta:

int iHighest( stringa simbolo, int timeframe, int tipo, int count=WHOLE_ARRAY, int start=0)
Restituisce l'indice del valore più alto trovato (offset rispetto alla barra corrente).
Parametri:
simbolo - Nome del simbolo, i cui dati saranno cercati. NULL significa simbolo corrente.
timeframe - Periodo. Può essere uno dei periodi di un grafico. 0 indica il periodo del grafico corrente.
tipo - L'identificatore della serie temporale. Può essere uno qualsiasi degli identificatori di serie temporali.
contare - Numero di elementi della serie temporale (nella direzione dalla barra corrente all'indice ascendente), tra i quali deve essere eseguita la ricerca.
avviare - L'indice (offset dalla barra corrente) della barra iniziale da cui partirà la ricerca del valore più alto. I valori negativi sono ignorati e sostituiti da valori zero.
La domanda è come specificare che la ricerca deve essere eseguita prima della barra sopra la quale è apparso il frattale e se il periodo è inferiore a un minuto..... come deve essere fatto?
 

Mi dispiace,

sarebbe fantastico. Ho guardato il tutorial sulle variabili globali, ho capito che questo è ciò di cui ho bisogno, ma non capisco le sfumature. Dove dichiararli, come scrivere i valori necessari in essi, ecc.

Se ci sono, per esempio, 5 EA appesi nel terminale su 5 coppie diverse e ogni EA ha 4 variabili che devono essere scritte, significa che abbiamo bisogno di 20 variabili globali e devono essere nominate in qualche modo usando il comando Symbol() in modo da non dover scrivere ogni nome nell'EA.

Tutto sommato, non è ancora per il mio cervello((

 
i999i:



Ricorda il tempo di apertura della barra in cui è stato impostato l'ultimo frattale, usalo per trovare il numero di questa barra. se il periodo è inferiore a un minuto........, com'è? Se il periodo del grafico, meno di un minuto semplicemente non c'è.
 
i999i:

Grazie per la risposta, ma quello che intendevo era come sapere se il frattale corrente è stato rotto o no prima che appaia il prossimo frattale

Se cerchi il prezzo di un frattale fresco (puoi scorrere la rotellina del mouse su questa pagina), allora saprai se questo frattale è sfondato. Il mio profilo ha dei link alla B.Williams ProfitUnity expo. L'ho scritto io stesso. Ora faccio trading con segnali inversi, nella direzione del ritorno del prezzo alla sua media mobile.
 
xant:

Mi dispiace,

sarebbe fantastico. Ho guardato il tutorial sulle variabili globali, ho capito che questo è ciò di cui ho bisogno, ma non capisco le sfumature. Dove dichiararli, come scriverci i valori giusti, ecc.

Se ci sono, per esempio, 5 EA appesi nel terminale su 5 coppie diverse e ogni EA ha 4 variabili che devono essere scritte, significa che abbiamo bisogno di 20 variabili globali e devono essere nominate in qualche modo usando il comando Symbol() in modo da non dover scrivere ogni nome nell'EA.

Tutto sommato, non è ancora per il mio cervello((

Se non ho abbastanza cervello per le variabili globali del terminale, allora anche per scriverle in un file...

double Var1, Var2, Var3, Var4;  // 4-ре переменных для сохранения (у Вас они свои !!!)
void fSave_MineGV (string fs_PrefName = "")     // префикс имени переменной
{
    static datetime ldt_NewBar;
    datetime ldaTBeginBar = iTime (Symbol(), 1, 0);
//----
    //---- Сохраняемся в начале каждой минуты
    if (ldt_NewBar == ldaTBeginBar) return;
    ldt_NewBar = ldaTBeginBar;
    //---- Сохраняем поочереди значения каждой переменной
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
    GlobalVariableSet (ls_Name, Var1);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    GlobalVariableSet (ls_Name, Var2);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    GlobalVariableSet (ls_Name, Var3);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    GlobalVariableSet (ls_Name, Var4);
//----
}
// в init()
void fGet_MineGV (string fs_PrefName = "")     // префикс имени переменной
{
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
//----
    //---- Восстанавливаем значения переменных
    if (GlobalVariableCheck (ls_Name)) Var1 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    if (GlobalVariableCheck (ls_Name)) Var2 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    if (GlobalVariableCheck (ls_Name)) Var3 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    if (GlobalVariableCheck (ls_Name)) Var4 = GlobalVariableGet (ls_Name);
//----
}

Ma c'è una prima volta per tutto. fSave_MineGV() dentro start() e fGet_MineGV() dentro init().

Spero che lo capirai e che scriverai le tue variabili di salvataggio invece di Var1, ecc.
 
xant:

Mi dispiace,

sarebbe fantastico. Ho guardato il tutorial sulle variabili globali, ho capito che questo è ciò di cui ho bisogno, ma non capisco le sfumature. Dove dichiararli, come scrivere i valori necessari in essi, ecc.

Se ci sono, per esempio, 5 EA appesi nel terminale su 5 coppie diverse e ogni EA ha 4 variabili che devono essere scritte, significa che abbiamo bisogno di 20 variabili globali e devono essere nominate in qualche modo usando il comando Symbol() in modo da non dover scrivere ogni nome nell'EA.

Beh, non è ancora per il mio cervello((

Le variabili di cui hai bisogno sono davvero 20, non vuoi scriverle nel tuo EA, fai un file separato, ci sono comandi di preprocessore per predefinire le costanti, e per un principiante è molto più facile lavorare con le variabili globali, che con i file, ma naturalmente tu sei il capo.

stringa perem = "peremEURUSD-1";
stringa perem = "peremEURUSD-2";
doppio A;
//+------------------------------------------------------------------+
//| funzione di avvio del programma script |
//+------------------------------------------------------------------+
int start()
{
GlobalVariableSet(peremEURUSD-1,2.5); //crea o assegna un nuovo valore
A=GlobalVariableGet(peremEURUSD-1); //quindi leggere il valore
if(GlobalVariableGet(peremEURUSD-1)==....) //controllare in questo modo
ritorno(0);
}

//+------------------------------------------------------------------+

P.S. È meglio predefinire le variabili (per una coppia di valute) una volta init.

 

rigonich,

perché, nell'EA voglio solo, ho pensato al contrario che la registrazione di file è più facile.

TarasBY ,

Grazie, è tutto chiaro, lo proverò, penso che funzionerà.

 
per favore consigliate... che diavolo... nella sua forma originale (senzaPlaySound("alert.wav");) - funziona. Ma se si aggiunge a qualsiasi link oltre all'assegnazione della bandiera e qualche azione (suonare la musica per esempio) ... allora le bandiere stanno stampando 0000 e la musica sta suonando a tutta velocità! per favore dimmi dove l'errore?
      if(Stoch_1>Stoch_2) flag1=1 ;  
      {Print (flag1,flag2,flag3,flag4);
      
      if(Stoch_1<Stoch_2 && flag1==1) flag2=1;
      {Print (flag1,flag2,flag3,flag4);
      
      if ((Stoch_1>Stoch_2) && flag1==1 && flag2==1) flag3=1; 
      {Print (flag1,flag2,flag3,flag4);PlaySound("alert.wav");
      
       if(Stoch_1<Stoch_2 && flag1==1 && flag2==1 &&  flag3==1) flag4=1;
              {Print (flag1,flag2,flag3,flag4);
       if(Stoch_1>Stoch_2 && flag1==1 && flag2==1 &&  flag3==1 && flag4==1) 
       {OrderSend (Symbol( ), OP_SELL,  0.01 ,Bid, 0, 0, 0, NULL, 450, 0, CLR_NONE);
        Print ("OUT");


 
flag1=0;
flag2=0;
flag3=0;
flag4=0;}

}}     
  }}}
=================================================================
.....