Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1272

 
Alexey Viktorov:

Dipende da qual è lo scopo di catturare l'aggiornamento. Che ne dite di riempire troppo l'array?

Cosa importa quale sia lo scopo? La domanda è perché un evento così ovvio sia così difficile da catturare, dato che ci sono un sacco di altre proprietà meno usate e necessarie. In questo caso, l'obiettivo è la notifica (allarme).

 
leonerd:

Che differenza fa quale sia l'obiettivo? La domanda è perché un evento così ovvio è così difficile da catturare, anche se ci sono molte altre proprietà meno usate e necessarie. In questo caso, l'obiettivo è la notifica (allarme).

Quindi è questo evento ovvio che viene evidenziato nel tipo di transazione. Prova la biblioteca di Trishkin in 58 articoli. Forse ha una semplice opzione.

 
в 58 ми статьях

Beh, grazie ))

Sospetto che tenga il suo registro allo stesso modo.

Изменение открытого ордера. К данным изменениям относятся не только явные изменения со стороны клиентского терминала или торгового сервера, но также и изменение его состояния при выставлении (например, переход из состояния ORDER_STATE_STARTED aORDER_STATE_PLACED o daORDER_STATE_PLACED aORDER_STATE_PARTIAL, ecc.)


Mi basterebbe sapere che questo non è il primo ORDER_STATE_PLACED su un particolare biglietto d'ordine.

Risulta che due TRADE_TRANSACTION_ORDER_UPDATE arrivano quando viene effettuato il primo ordine. Ecco, e il terzo mi starebbe già bene come cambiamento, che nel mio caso è solo un cambiamento di prezzo. O il secondoORDER_STATE_PLACED.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Dovreste anche controllareORDER_TIME_SETUP. È nuovo ogni volta?
 
Seguito l'esempio MT4 "STRINGS: ASCII CHARACTERS TABLE AND USE"

//+------------------------------------------------------------------+
//| StringLowerCase |
//+------------------------------------------------------------------+
string StringLowerCase(string str)
  {
   string s = str;
   int lenght = StringLen(str) - 1, symbol;
   while(lenght >= 0)
     {
      symbol = StringGetChar(s, lenght);
      if((symbol > 64 && symbol < 91) || (symbol > 191 && symbol < 224))
         s = StringSetChar(s, lenght, symbol + 32);// тут possible loss of data due to type conversion
      else
         if(symbol > -65 && symbol < -32)
            s = StringSetChar(s, lenght, symbol + 288);// тут possible loss of data due to type conversion
      lenght--;
     }
   return(s);
  }
//+------------------------------------------------------------------+
//| StringUpperCase |
//+------------------------------------------------------------------+
string StringUpperCase(string str)
  {
   string s = str;
   int lenght = StringLen(str) - 1, symbol;
   while(lenght >= 0)
     {
      symbol = StringGetChar(s, lenght);
      if((symbol > 96 && symbol < 123) || (symbol > 223 && symbol < 256))
         s = StringSetChar(s, lenght, symbol - 32);// тут possible loss of data due to type conversion
      else
         if(symbol > -33 && symbol < 0)
            s = StringSetChar(s, lenght, symbol + 224);// тут possible loss of data due to type conversion
      lenght--;
     }
   return(s);
  }

Se non ti dispiace, per favore aiutami a sistemarlo...
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Приведение типов - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SGarnov:
Ho fatto l'esempio di MT4 "STRINGS: ASCII CHARACTERS TABLE AND HIS USE"


Se non ti dispiace, per favore aiutami a sistemarlo...

StringSetChart() bool restituisce un bool. E lo stai assegnando a una variabile stringa... Se questa è la domanda.

 
Isimboli personalizzati possono essere creati senza usare il menu di MT5, semplicemente mettendo i file giusti nelle cartelle giuste?
 

Salve. Ho scritto una funzione che controlla le condizioni per entrare in una posizione.

Il problema è che se la condizione (evidenziata in giallo) non è soddisfatta - la funzione non termina ma passa alla condizione successiva. Così, il segnale non funziona correttamente.

Cosa si dovrebbe fare per far sì che la funzione smetta di funzionare quando una delle condizioni non è soddisfatta - immediatamente dopo la condizione errata?

bool BuySignal_new()
{
   double Sig_Up[];                 // динамический массив для хранения значений индикатора на покупку для каждого бара
   double Sig_Down[];               // динамический массив для хранения значений индикатора на продажу для каждого бара
   ArraySetAsSeries (Sig_Up,true);   // устанавливаем индексацию как в таймсерии ( т.е. 5,4,3,2,1,0) в динамич. массиве для индикатора
   ArraySetAsSeries (Sig_Down,true); // устанавливаем индексацию как в таймсерии ( т.е. 5,4,3,2,1,0) в динамич. массиве для индикатора
   ResetLastError();
   double close = NormalizeDouble(iClose(_Symbol,_Period,1),Digits());
   double close_1 = NormalizeDouble(iClose(_Symbol,_Period,0),Digits());
   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),Digits());
if(CopyBuffer(Handle_stepma_line,0,1,5,Sig_Up)==5 && CopyBuffer(Handle_stepma_line,1,1,4,Sig_Down)==4 )
  {
   Print("Данные скопированы. Ошибок нет.");
   
  } 
else
    {
     Print("Ошибка копирования. Нет данных");
     return(false);
    }

if (Sig_Up[1] < Sig_Down[1] && Sig_Up[0] > Sig_Down[0])
  {
   Print("условие 1 - ок");
  }
else
    {
    Print("условие 1 НЕ выполненно");
    return(false);
    }
if (close < Sig_Up[1]&& Bid > Sig_Up[0])
  { 
   Print ("условие 2 - ок");
   return(true);
  }   
else
    {
    Print("условие 2 НЕ выполненно");
    return(false);
    }   
 
Sergey:

Cosa dovrebbe essere fatto, in modo che se una delle condizioni della funzione non è soddisfatta - l'intera funzione terminerà, immediatamente dopo la condizione errata?

Rimuovi la ramificazione per altro, puoi provare in questo modo:

   if(CopyBuffer(Handle_stepma_line, 0, 1, 5, Sig_Up) != 5)
   {
      Print("Ошибка копирования. Нет данных");
      return(false);
   }

   if(CopyBuffer(Handle_stepma_line, 1, 1, 4, Sig_Down) != 4)
   {
      Print("Ошибка копирования. Нет данных");
      return(false);
   }


   if(!(Sig_Up[1] < Sig_Down[1] && Sig_Up[0] > Sig_Down[0]))
   {
      Print("условие 1 НЕ выполненно");
      return(false);
   }

   if (!(close < Sig_Up[1] && Bid > Sig_Up[0]))
   {
      Print("условие 2 НЕ выполненно");
      return(false);
   }
//--- если дошли сюда, то все условия выполнены
   return(true);
 
Igor Makanu:

rimuovere la ramificazione dall'altro, si può provare in questo modo:

Grazie, farò una prova.

Motivazione: