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

 
danil77783:

Salve. Potresti aiutarmi, se hai tempo La domanda è questa, ho bisogno che l'EA apra un ordine su ogni segnale di due indicatori, (danno un segnale quando sono in certa combinazione) in una parola, ci dovrebbero essere diversi ordini di acquisto o vendita nel mercato, rispettivamente, secondo i segnali degli indicatori. Ma ho solo un ordine nel mercato e finché non si chiude quello successivo non si apre ...... È una questione di conteggio degli ordini? Per favore, datemi un suggerimento. Se ne avete bisogno, posso mandarvi il codice.

Grazie in anticipo!

rimuovere la condizione "if (OrdersTotal()==0)....". - Dicono solo: cerca le voci e apri nuovi ordini solo quando non ci sono ordini.

Se non volete aprire un grosso pacchetto di nuovi ordini senza tale condizione, dovete creare una condizione aggiuntiva. E questo dipende dalla tua strategia: non aprirne uno nuovo nel tempo T del precedente, o controllare le barre o mantenere le distanze in pip tra gli ordini...

 

Salve. Inizierò dicendovi che vi ringrazio molto per aiutare i neofiti. Non sarei in grado di rispondere da solo, giorno dopo giorno, a domande elementari a un principiante e poi a un altro.

E la domanda è questa:

Prima, quando mql4 era un po' diverso, pensavo che qualsiasi elaborazione di ordini, come apertura/chiusura/modifica dopo un possibile errore, dovesse essere interrotta dalla funzione return(0). A causa di ciò, se dovessi chiudere diversi ordini aperti al prezzo corrente, il tester li chiuderebbe uno per uno su ogni nuova barra e questo probabilmente distorcerebbe l'immagine reale (abbastanza drammaticamente, a volte) nel tester (per ogni tick di un frame). Il nuovo EA deve chiudere diversi ordini esattamente in base al segnale e parzialmente.

Domanda: è possibile elaborarli tutti (chiuderli parzialmente) in un ciclo, senza interrompere il ciclo ogni volta? Il tester sarà in grado di gestirlo? Cioè, sarà in grado di chiuderli parzialmente tutti in una barra?

 
XpeHHukoB:

Salve. Inizierò dicendovi che vi ringrazio molto per aiutare i neofiti. Non sarei in grado di rispondere da solo, giorno dopo giorno, a domande elementari a un principiante e poi a un altro.

E la domanda è questa:

Prima, quando mql4 era un po' diverso, pensavo che qualsiasi elaborazione di ordini, come apertura/chiusura/modifica dopo un possibile errore, dovesse essere interrotta dalla funzione return(0). A causa di ciò, se dovessi chiudere diversi ordini aperti al prezzo corrente, il tester li chiuderebbe uno per uno su ogni nuova barra e questo probabilmente distorcerebbe l'immagine reale (abbastanza drammaticamente, a volte) nel tester (per ogni tick di un frame). Il nuovo EA deve chiudere diversi ordini esattamente in base al segnale e parzialmente.

Domanda: è possibile elaborarli tutti (chiuderli parzialmente) in un ciclo, senza interrompere il ciclo ogni volta? Il tester sarà in grado di gestirlo? Cioè, sarà in grado di chiuderli parzialmente tutti in una barra?

Può farlo senza problemi ad una piccola condizione. Il codice deve essere scritto correttamente.

 
Seric29:
Se ci sono 2 funzioni (eventualmente sovraccaricate), per esempio, int Funkz(int a) int Funkz(int a, int b, int w), e poi il programma viene compilato, quale funzione lavorerà più velocemente, la prima considerando che ha un solo argomento o non ha importanza, perché il programma è già costruito e ciò che è descritto nel corpo, o c'è lo stesso un piccolo effetto, perché gli argomenti della funzione rappresentano uno stack per cui la memoria è riservata?

Se avete due funzioni con lo stesso nome ma con un numero diverso di argomenti, non è una questione di quale sarà chiamata più velocemente. Quando chiamate una funzione, non scrivete Funkz(), ma specificate il numero di argomenti.

La questione è se il compilatore masticherà le funzioni con lo stesso nome.

Se ho capito bene, non stiamo parlando del codice, ma del file compilato?

 
Ehm... Grazie per la tua risposta, Alexei. molte cose sono state chiarite.
 
Aiuto per favore, abbiamo SL uguale a un valore in pip (questo livello di perdita - parametro regolabile dall'utente), e abbiamo un prezzo simbolo per il giorno basso o alto - è come un secondo stop loss e in diversi punti nel tempo saranno diversi, ho bisogno della funzione di confronto automatico - in modo che dopo che il robot imposta uno stop loss per il parametro più piccolo (SL o Ilow - per comprare o SL -iHign per vendere) di seguito è il codice che non dà il risultato desiderato, non riesco a capire cosa sia...
   пользовательский параметр - extern int    SL               = 1000;
//---------------------------------------------------------------
bool CheckForStopLossSell()
  {
   double Hign=iHigh(Symbol(),PERIOD_D1,1);
   double StopLoss=NormalizeDouble(SL*Point,Digits);
   double uroven = StopLoss;
   double OOPS=iLow(Symbol(),PERIOD_D1,1)-StepOpenOrder*Point;
   double StopLossS=NormalizeDouble(OOPS+StopLoss,Digits);
   //----------------------------------------
   if(Hign>StopLoss) Alert("StopLoss");
   return bool(StopLossS);
   
   //else
   if(Hign<StopLoss) Alert("Hign");
   return bool(Hign); 
   
   //else
   Alert("uroven");
   return bool(uroven); 
   
  }
//--------------------------------------------------------------
bool CheckForStopLossBuy()
  {
   double LOW=iLow(Symbol(),PERIOD_D1,1);
   double StopLoss=SL*Point;
   double uroven = StopLoss;
   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;
   double OOPB = (iHigh(Symbol(),PERIOD_D1,1)+SPREAD)+StepOpenOrder*Point;
   double StopLossB=OOPB-StopLoss;
   //-------------------------------------------
   if(LOW<StopLoss) Alert("StopLoss"); 
   return bool(StopLossB);  
   
   //else
   if(LOW>StopLoss) Alert("LOW"); 
   return bool(LOW);  
   
   //else
   Alert("uroven");
   return bool(uroven);  
   
  }
//---------------------------------------------------------------
 
XpeHHukoB:

Se avete due funzioni con lo stesso nome ma con un numero diverso di argomenti, non è una questione di quale sarà chiamata più velocemente. Quando chiamate una funzione, non scrivete Funkz(), ma specificate il numero di argomenti.

La questione è se il compilatore masticherà le funzioni con lo stesso nome.

Intendi il file compilato, non il codice?

E se le funzioni sono diverse, quale funzionerà più velocemente con meno o più argomenti? Penso che il sovraccarico con diversi numeri porti anche un carico o è solo per comodità?

 

Per favore, ditemi come scrivere #define?

Lo scrivo così

#define  my_POS    cst_Position.my_Position

Se cambio questa costruzione in def - tutto funziona.

my_POS.SelectByTicket(pos_DATA(DATA_TICKET))

Ma quando scrivo solo my_POS. l'elenco delle funzioni non appare dopo un punto.

Lo stesso per

#define  pos_DATA  cst_Position.getPositionData

non ci sono suggerimenti dopo la pos_DATA(.

Cosa sto facendo di sbagliato?

 
bool operation=0;for(int pos=0;pos<OrdersTotal();pos++)
     {if ( OrderSelect (pos, SELECT_BY_POS) == false )  continue;
      if ( OrderSymbol()==Symbol()) break;}


//=========================================================================================================
if(Hour()>=2&&Hour()<=18&&operation==0){
if(OPB1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)
        {OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);}}
        if (OrderType()==OP_BUY &&OrdersTotal()==1&&OrderMagicNumber()==8)
        {OrderSend(Symbol(),OP_SELLSTOP,5*lots,OrderOpenPrice()-(ss-ss/4)*Point,0,0,SstopClose,"My order#",80,0,Red);}
       

if(OPS1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)        
         {OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);}}
         if (OrderType()==OP_SELL &&OrdersTotal()==1&&OrderMagicNumber()==8)
         {OrderSend(Symbol(),OP_BUYSTOP,5*lots,OrderOpenPrice()+(ss-ss/4)*Point,0,0,BstopClose,"My order#",80,0,Green);}}



if(OrderMagicNumber()==80){operation=0;
 {for( int  ii=OrdersTotal()-1;ii>=0;ii--)
       {OrderSelect(ii, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break;
         
          result = OrderDelete( OrderTicket() );//break;
          }}}}

Salve, cari esperti!

Per favore aiutatemi a risolvere questo problema.

Quando si testa qualsiasi coppia, tutto funziona correttamente, ma quando si lavora con altre valute, gli ordini pendenti non vengono piazzati (devo esporre l'ordine pendente) e non vengono chiusi dopo l'attivazione del take profit.

Per favore consigliate come cambiare il codice, se possibile:



Grazie mille in anticipo

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
File:
c5k8icfo.png  55 kb
 
Motzaart:

Salve, cari esperti!

Per favore aiutatemi a risolvere questo problema.

...

Si prega di inserire il codice correttamente:


Motivazione: