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

 
Rewerpool:

Perché scriverlo in questo modo?

Se metti l'EA solo su un simbolo, ma funzionerà su tutti? E il mago vedrà il suo!

Sono confuso!

Nel vecchio mql4 la condizione veniva controllata dall'inizio alla fine, indipendentemente dal risultato del controllo della prima nella lista delle condizioni. Da qui questa brutta scrittura, desiderio di ridurre il tempo di elaborazione.

Oggi, è scritto da qualche parte, ma non ricordo dove, se la prima condizione non è soddisfatta, allora il controllo si ferma. Di conseguenza, grattare l'orecchio sinistro con il mignolo del piede destro non ha senso.

 

@Konstantin Nikitin Quindi se scrivo all'inizio dell'iterazione come questo


 for (int i=OrdersTotal()-1; i>=0; i--)
   {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
  
   if (OrderSymbol() != Symbol()) continue;
   
   if (OrderMagicNumber() != Magic) continue;

Выставляться будут стопы и тейки любым ордерам? И не надо делать опрос на предмет кто торгует Бот или человек?
 
Rewerpool:

Quindi se scrivo all'inizio dell'iterazione in questo modo

void STOP_TAKE(void)
{
   int SPREAD    = (int)MarketInfo(Symbol(),MODE_SPREAD);
   if (stoploss<STOPLEVEL) stoploss=0; 
   if (takeprofit<STOPLEVEL) takeprofit=0;

     for(int i=0; i<OrdersTotal(); i++)
     {
          if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if(OrderSymbol()!=Symbol()) continue;
     
          int tip = OrderType();
          if(  tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT &&
               tip!=OP_SELL && tip!=OP_SELLSTOP && tip!=OP_SELLLIMIT ) continue;
     
          // переменные которые будут использоваться в любых ордерах
          int Ticket = OrderTicket();
          double    OOP = OrderOpenPrice(),
                    OSL = OrderStopLoss(),
                    OTP = OrderTakeProfit();
     
          //---
/* Если это удалить/заблокировать то будет работать со всеми ордерами не обращая внимания эксперта они или нет. Разблокировать, то сначала проверит ордера эксперта их нет то все остальные
          if( OrderMagicNumber() == Magic )
          { //----------Если Ордера Советника
               switch(tip)
               {
                    case OP_BUY:
                    case OP_BUYSTOP:
                    case OP_BUYLIMIT:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         }
                         break;
                         // end case
                         
                    default:
                         {
                              if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                              if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                              if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                              else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                         } // end case
               } // end switch
               
               continue;
          }
*/
          switch(tip)
          {
               case OP_BUY:
               case OP_BUYSTOP:
               case OP_BUYLIMIT:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    }
                    break;
                    // end case
                         
               default:
                    {
                         if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                         if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                         if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                         else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
                    } // end case
          } // end switch
     } // end for
} // end STOP_TAKE
Qualcosa del genere.
 

Buon pomeriggio. Questo è ciò che scrivono.

"Il prodotto può contenere solo un file EX4, non sono ammessi file aggiuntivi. Il nome del file EX4 e i nomi dei parametri di input devono essere scritti in lettere latine. Si raccomanda di utilizzare lerisorse per creare un'interfaccia user-friendly.

Per ragioni di sicurezza, le chiamate a qualsiasi DLL non sono permesse nel programma. Se sono necessari dati di prova per il programma dimostrativo, il programma dovrebbe creare da solo il file richiesto e informare l'utente. Puoi anche aggiungere i file richiesti usando la funzione ResourceLoad, ma sappi che tutti i prodotti sono controllati per possibili attività dannose prima di essere pubblicati sul Marketplace.

È vietato costruire qualsiasi restrizione sul Prodotto a seconda del tempo, del tipo o del numero del conto di trading, dello strumento finanziario, ecc. Tutte queste azioni saranno considerate ostili all'acquirente e non saranno tollerate".

Dite COME..... Fai una richiesta EA a un indicatore.

 
Oleksandr Kulibaba:

Buon pomeriggio. Questo è ciò che scrivono.

"Il prodotto può contenere solo un file EX4, non sono ammessi file aggiuntivi. Il nome del file EX4 e i nomi dei parametri di input devono essere scritti in lettere latine. Si raccomanda di utilizzare lerisorse per creare un'interfaccia user-friendly.

Per ragioni di sicurezza, le chiamate a qualsiasi DLL non sono permesse nel programma. Se sono necessari dati di prova per il programma dimostrativo, il programma dovrebbe creare da solo il file richiesto e informare l'utente. Puoi anche aggiungere i file richiesti usando la funzione ResourceLoad, ma sappi che tutti i prodotti sono controllati per possibili attività dannose prima di essere pubblicati sul Marketplace.

È vietato costruire qualsiasi restrizione sul Prodotto a seconda del tempo, del tipo o del numero del conto di trading, dello strumento finanziario, ecc. Tutte queste azioni saranno considerate ostili all'acquirente e non saranno tollerate".

Dite COME..... Fai una richiesta EA all'indicatore.

Tu stesso hai scritto la risposta: Usa una risorsa

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
В данном примере показано как проигрывать звуки из файлов Ok.wav и timeoit.wav, входящих в стандартную поставку терминала. Эти файлы находятся в папке означает папку, из которой запущен клиентский терминал MetaTrader 5.  Программным путем из mql5-программы каталог терминала можно узнать следующим образом: Расположение каталога данных терминала...
 
Vitaly Muzichenko:

Hai scritto tu stesso la risposta: usa la risorsa

Grazie per la risposta. Ma l'ho già letto e ho cercato di inserirlo. Non riesco a prenderlo, sto facendo qualcosa di sbagliato o lo sto mettendo nel posto sbagliato. Mi rivolgo a tre indicatori. Per favore, descrivete questo script in modo più dettagliato.

Cosa, dove, quali parametri... Grazie in anticipo.

//+------------------------------------------------------------------+ 
#resource "\\Indicators\\SampleIndicator.ex5" 
int handle_ind; 
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   | 
//+------------------------------------------------------------------+ 
int OnInit() 
  { 
//--- 
   handle_ind=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex5"); 
   if(handle_ind==INVALID_HANDLE) 
     { 
      Print("Expert: iCustom call: Error code=",GetLastError()); 
      return(INIT_FAILED); 
     } 
//--- 
   return(INIT_SUCCEEDED); 
  }
 
Oleksandr Kulibaba:

Grazie per la risposta. Ma l'ho già letto e ho cercato di inserirlo. Non riesco a farlo funzionare, o lo sto facendo male o lo sto mettendo nel posto sbagliato. Mi rivolgo a tre indicatori. Per favore, descrivete questo script in modo più dettagliato.

Cosa, dove, quali parametri... Grazie in anticipo.

Create tre o quante variabili vi servono e chiamatele come nell'esempiohandle_ind=iCustom(_Symbol,_Period,"::Indicators\\blah-blah-blah) Inserite il codice. Solo per far capire alla gente!

iCustom è QUESTO!

iCustom

Возвращает значение указанного пользовательского индикатора. 



double  iCustom( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   string       name,             // папка/имя_пользовательского индикатора 
   ...                            // список входных параметров индикатора 
   int          mode,             // источник данных 
   int          shift             // сдвиг 
   );
 
Se
if(handle_ind==INVALID_HANDLE) то это значит - не корректный хэндл
 
Rewerpool:

Create tre variabili o quante ve ne servono e interrogatele come nell'esempiohandle_ind=iCustom(_Symbol,_Period,"::Indicators\\blah-blah-blah) Inserite il codice. Solo perché la gente capisca!

iCustom è QUESTO!

Se

Farò un tentativo. Grazie.

 
@Oleksandr Kulibaba Inserisci il tuo codice, errori! Avere comprensione! Le brave persone vi aiuteranno! Non è chiaro quale sia il tuo problema!
 
@Konstantin Nikitin Bel lavoro. Rimosso dal codice
if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))

Lo stop ora si contrae ad ogni tick )))))


Nel post hai indicato la chiusura del codice per il mago! Lo capisco! La situazione è proprio questa: faccio trading a mano, ma improvvisamente ho bisogno di fare un passo indietro e dare il controllo all'EA (ricerca di un pattern e di un punto di entrata). Voglio separare tutte le operazioni. Ma l'arresto e il prelievo, come richiesto da tutti. Forse non l'ho ancora capito bene!