Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1268

 
Ragazzi, questa è una domanda per la quale non ho trovato una risposta da nessuna parte. Quale funzione scrivere nell'indicatore in modo che le nuove barre non si aprano e ticchettino nella barra zero, finché non funziona la mia condizione, per favore rispondetemi in privato))
 

Ciao!

Sono confuso in tre pini:

Ho impostato dei numeri extern int a =2; extern int b =3; extern int c =4; come faccio ora a impostare il numero abcper cambiare il suo valore quando cambio a, o b, o c per confrontarlo con qualche dato d (per esempiod=344)?

Grazie!

 
novichok2018:

Ciao!

Sono confuso in tre pini:

Ho impostato dei numeri extern int a =2; extern int b =3; extern int c =4; come faccio ora a impostare il numero abcper cambiare il suo valore quando cambio a, o b, o c per confrontarlo con qualche dato d (per esempiod=344)?

Grazie!

x = c + b*10 + a*100

 
Сергей Таболин:

x = c + b*10 + a*100

Oh, mio Dio! Mi sto scervellando! Grazie!

 
Ciao, 2020.10.03_13:33 GMT+3. Ho preso l'Expert Advisor standard Moving Average per MetaTrader 4. E ha iniziato a cambiarlo in modo che diventasse redditizio. Quando si cerca di descrivere le condizioni di chiusura usando la funzione OrderProfit() nel tester della strategia, l'Expert Advisor ha smesso di chiudere i trade a quella condizione. Non arriva a chiudere uno scambio. Tuttavia, dubito di aver scritto correttamente le condizioni di chiusura. In caso contrario, l'Expert Advisor chiuderebbe le transazioni. Probabilmente cercherò di scrivere il prezzo di apertura dell'affare e gli ultimi prezzi. Una volta raggiunta la massima differenza tra il prezzo di apertura e l'ultimo prezzo e questa differenza si riduce - chiudi il trade. Allego il file Expert Advisor. 13:50 GMT+3.
File:
 
Николай Никитюк:
Ciao, 2020.10.03_13:33 GMT+3. Ho preso la media mobile standard EA per MetaTrader 4. E ha iniziato a cambiarlo in modo che diventasse redditizio. Quando si cerca di descrivere le condizioni di chiusura usando la funzione OrderProfit() nel tester della strategia, l'Expert Advisor ha smesso di chiudere i trade a quella condizione. Non arriva a chiudere uno scambio. Tuttavia, dubito di aver scritto correttamente le condizioni di chiusura. In caso contrario, l'Expert Advisor chiuderebbe le transazioni. Probabilmente cercherò di scrivere il prezzo di apertura dell'affare e gli ultimi prezzi. Una volta raggiunta la massima differenza tra il prezzo di apertura e l'ultimo prezzo e questa differenza si riduce - chiudi il trade. Allego il file Expert Advisor. 13:50 GMT+3.
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
   //--- check order type
      // 
      if(OrderType()==OP_BUY)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;    
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())     // Исходя из ваших условий, то вот            
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }  
         else break;     
         break;
        }
      if(OrderType()==OP_SELL)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;     
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())        // Исходя из ваших условий, то вот
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         else break;  
         break;
        }
     }      

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

Ciao!

Ho iniziato a scrivere una funzione per normalizzare i dati di input. Ma non posso "sostituire" i valori originali con quelli normalizzati. In altre parole, non posso aggiornare i valori nel buffer Open timeseries con i nuovi valori dell'array Temp. Qual è il mio errore? Ho la sensazione che sto cercando di incrociare OOP e non-OOP)).

Open=new CiOpen();
   if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),PERIOD_CURRENT))
      return;
//---
   int bars=10;
   double Temp[];                //Создаем массив для временного хранения входных данных
   ArraySetAsSeries(Temp,true);  //Устанавливает флаг AS_SERIES
   Open.GetData(0,bars,Temp);    //Копируем необходимые данные в массив Temp
   InputNormalize(Temp,bars);    //Нормализуем данные в массиве
 
//---Как заменить значения в Open значениями из Temp?---

  }
//+------------------------------------------------------------------+
//| функция нормализации входных данных                              |
//+------------------------------------------------------------------+
void InputNormalize(double &buffer[],int bars)
  {
   double d1=-1;
   double d2=1;
   double x_min=buffer[ArrayMinimum(buffer,0,bars)];
   double x_max=buffer[ArrayMaximum(buffer,0,bars)];
   for(int i=0; i<bars; i++)
     {
      buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
     }
   return;
  }

Sono sicuro che si può fare in un modo più semplice! In questo caso vi prego di insegnarmi)

 
Aleksei Lesnikov:

Ciao!

Ho iniziato a scrivere una funzione per normalizzare i dati di input. Ma non posso "sostituire" i valori originali con quelli normalizzati. Cioè non posso aggiornare i valori nel buffer Open timeseries con i nuovi valori dell'array Temp. Qual è il mio errore? Ho la sensazione che sto cercando di incrociare OOP e non-OOP)).

Sono sicuro che si può fare in un modo più semplice! In questo caso vi prego di insegnarmi)

Leggere la documentazione della lingua

Il valore delle variabili predefinite è impostato dal terminale client prima di avviare un programma mql4 per l'esecuzione. Le variabili predefinite sono costanti e non possono essere cambiate dal programma mql4.


Предопределенные переменные - Справочник MQL4
Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
 
Alexey Viktorov:

Leggere la documentazione della lingua

Alexey, grazie! Ora è chiaro che non è possibile.

È vero, non sono esattamente mql4. Sto cercando di cambiare i dati attraverso la classe CiOpen. Sono confuso dal metodo Update, che dovrebbe cambiare l'elemento in una posizione specificata dell'array.

Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
  • www.mql5.com
CiOpen - Таймсерии - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksei Lesnikov:

Alexei, grazie! Ora è chiaro che non è possibile.

È vero, non ho esattamente mql4. Sto cercando di cambiare i dati attraverso la classe CiOpen. Sono confuso dal metodo Update, che dovrebbe cambiare l'elemento in una posizione specificata dell'array.

Poiché la domanda è posta nella sezione mql4, ho risposto per quanto riguarda mql4. Non ci sono accenni a mql5 nella tua domanda. Ma il risultato è lo stesso.

Motivazione: