Aiuto per la codifica - pagina 778

 

Qualcuno potrebbe mostrarmi come rendere questo codice più breve? Come usare for cycle per questo?

extern double S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15;
if (S1==1234) S1=DoubleToString(S1);
if (S2==1234) S2=DoubleToString(S2);
if (S3==1234) S3=DoubleToString(S3);
if (S4==1234) S4=DoubleToString(S4);
if (S5==1234) S5=DoubleToString(S5);
if (S6==1234) S6=DoubleToString(S6);
if (S7==1234) S7=DoubleToString(S7);
if (S8==1234) S8=DoubleToString(S8);
if (S9==1234) S9=DoubleToString(S9);

Vorrei qualcosa di simile, ma non so come cambiare i nomi delle variabili.

for(i=1; i<=9; i++){
if (S+i==1234) S+i=DoubleToString(S+i);
}
 
Karel Nagel:

Qualcuno potrebbe mostrarmi come rendere questo codice più breve? Come usare for cycle per questo?

Vorrei qualcosa del genere, ma non so come cambiare i nomi delle variabili.

Non si può inizializzare un array con una lista di input, a causa delle limitazioni del MQL. (Solo espressioni costanti come { 2, 5, 3.1 } andranno bene).

Ma dal momento che hai bisogno di convertire i doppi in stringhe, puoi usare StringFormat. La cosa interessante di questa funzione è che accetta un numero arbitrario di argomenti.

Con l'aiuto di StringSplit può essere usato per creare un array al volo:

string line=StringFormat("%g %g %g %g %g %g %g %g %g",S1,S2,S3,S4,S5,S6,S7,S8,S9);
string numbers[];
int count=StringSplit(line,' ',numbers);
for(int i=0; i<count; i++)
  {
   if(numbers[i]=="1234") Print(" S",i+1," == 1234");
  }
 
rsiArray[0] = iRSI(NULL,0,10,PRICE_CLOSE,1);
rsiArray[1] = iRSI(NULL,0,10,PRICE_CLOSE,2);
rsiArray[2] = iRSI(NULL,0,10,PRICE_CLOSE,3);
rsiArray[3] = iRSI(NULL,0,10,PRICE_CLOSE,4);
rsiArray[4] = iRSI(NULL,0,10,PRICE_CLOSE,5);
ArraySetAsSeries(rsiArray, true); 

upperEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_UPPER, 0);
lowerEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_LOWER, 0); 

Sto cercando di capire questo da troppo tempo ormai, ho bisogno di aiuto.

I valori della busta non corrispondono a rsiArray[0] o a qualsiasi valore che vedo sui grafici e non riesco a capire perché.


Qualche idea?


Grazie

EDIT: (corretto) ok, tutto quello che dovevo fare era riavviare mt4 e il codice ha funzionato bene.

 

Ho passato ore a cercare di far funzionare correttamente un EA/utility e ho fatto diverse modifiche fino a quando il mio cervello non si è intorpidito. In allegato c'è una versione preliminare e la migliorerò una volta che avrò superato l'ostacolo delle basi che funzionano correttamente che è quello di suonare un allarme quando un ordine di acquisto/vendita aperto viene aggiunto e un allarme diverso quando un ordine di acquisto/vendita aperto viene chiuso. Questa versione a volte funziona e a volte no quindi non è affidabile a questo punto.


//+------------------------------------------------------------------+
//|               myNotify.mq4                                       |
//|               Notify me by sound file of change in orders        |
//+------------------------------------------------------------------+

//---- input parameters
extern string OrderClosedWav = "OrderClosed.wav";
extern string OrderOpenedWav = "OrderOpened.wav";
string sVersion = "1.39";
int iOld, iNew = 0;
int i = 0;
uchar ii = 0;
long NewOrdersHash = 0;
long OldOrdersHash = 0;

int nOrders = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
// +------------------------------------------------------------------+
// |  expert deinitialization function                                |
// +------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()
{ 
    nOrders = 0;
    NewOrdersHash = 0;

//First Pass
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 

OldOrdersHash = NewOrdersHash;
iOld =nOrders;

    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
// Wait
         Sleep(2000);

//Second Pass to compare after short pause
    nOrders = 0;
    NewOrdersHash = 0;
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
iNew = nOrders;

    if (ii > 24) {ii = 1;} else {ii++;}
       
    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
    if (OldOrdersHash != NewOrdersHash)
    {
     if (iNew > iOld)
       PlaySound(OrderOpenedWav);
     else
       PlaySound(OrderClosedWav);
    }

return(0);

}  

/*
void OrdersF()
   {

    nOrders = 0;
    NewOrdersHash = 0;
    for(int i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)          
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
    iNew = nOrders;
    return;
   }
*/
//+------------------------------------------------------------------+

 

Ciao ragazzi, sono nuovo. Voglio fare una modifica molto semplice su questo indicatore

Come e dove posso semplicemente mettere nella casella Descrizione della Linea Orizzontale, la parola, Alert_ ?

per farlo apparire automaticamente?

In attesa di una vostra risposta



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

//|                                              horizontal line.mq4 |
//|                                                          Wdholic |
//|                            https://www.mql5.com/en/users/wdholic |
//+------------------------------------------------------------------+
#property copyright "Wdholic"
#property link      "https://www.mql5.com/en/users/wdholic"
#property version   "1.00"
#property strict

#import "cfunctions.dll" 
int      MT4_ScreenToClient(int hWnd, int& iX[]);  
#import
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  { 
    double pmax=ChartGetDouble(0,CHART_PRICE_MAX);
    double pmin=ChartGetDouble(0,CHART_PRICE_MIN);
    double Ymax=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)*1.0;
   //  Alert(pmin);Alert(pmax);Alert(Ymax);
   int iCoords[2] ;
    int hWin = WindowHandle( Symbol(), Period());  
   
    MT4_ScreenToClient(hWin, iCoords);    
               
    double cory=iCoords[1]*1.0;
    double range=(pmax-pmin);
    
    double XY= (cory*1.0)/Ymax;
      double P=pmax-XY*range;
     
        
   Line("test_",P,clrAqua);
   WindowRedraw();
   return;
  }
//+------------------------------------------------------------------+

void Line(string t,double P,color C )
{ int a=1;string nm;
    nm="line_"+t+string(a);
  while(ObjectFind(0,nm)==0){ a++; nm="line_"+t+string(a);}
  
if(ObjectFind(0,nm)<0){
  ObjectCreate(0,nm,OBJ_HLINE,0,0,0); 
  ObjectSet( nm,OBJPROP_COLOR,C);}
  ObjectSet( nm,OBJPROP_PRICE1,P);  
  ObjectSet( nm,OBJPROP_SELECTED,1);  
}

 

Qualcuno può aiutarmi a codificare questo. Mettendo Rettangolo come alto e basso degli ultimi 3 mesi come mostrato grazie

File:
INDIxxx.jpg  243 kb
 

qualcuno aiuta con lo stoploss sul precedente ma cross



 

Ciao,

ho un'idea. Ma non conosco molto il codice mq4.

Precedente alto è inferiore al 2 ° alto precedente, quindi acquistare l'ordine insospeso al precedente alto * 2% o 1% e quando il prezzo al tocco candela corrente che l'ordine acquistare.

Il minimo precedente è superiore al secondo minimo precedente, quindi vendi l'ordine pendente al minimo precedente * -2% o -1% e quando il prezzo alla candela corrente tocca quell'ordine vendi.

Qualsiasi periodo. Nessun obiettivo Nessun stop loss. Trailing stop loss come il contrario.

Grato a chiunque, che può fare il codice mq4. Ho bisogno di aiuto. Solo MT4.

 

Ciao...

Puoi fare un Expert per questa strategia per favore

Esperto di rinforzo

Impostazioni:

1.Opzione: solo vendita / solo acquisto

2.TP: 50

3.Sl: 00

4.Passo: 150

5.Lotto iniziale: 0,1

6.Moltiplicazione: 1.2.4.8.16... ...

7.Totale ordini: 100

8.Numero magico: 111111

Il metodo di lavoro:

1- Apertura di una posizione all'inizio automaticamente del lotto specificato .

2- Cambiare il Tp per tutte le operazioni su ogni rinforzo .

Secondo la seguente equazione: Tp per l'ultima posizione doppia ci copre tutte le perdite fluttuanti + il profitto dell'ultima posizione .

3- Ritorno al lotto iniziale .

 
BANSINO Money Maker:

Ciao ...

Puoi fare un Expert per questa strategia per favore

Esperto di rinforzo

Impostazioni :

1. Opzione: Vendere solo / Comprare solo

2. TP: 50

3. Sl: 00

4. Passo: 150

5. Lotto iniziale: 0,1

6. Moltiplicazione: 1.2.4.8.16... ...

7. Totale ordini: 100

8. Numero magico: 111111

Il metodo di lavoro :

1- Apertura di una posizione all'inizio automaticamente del lotto specificato .

2- Cambiare il Tp per tutte le operazioni su ogni rinforzo .

Secondo la seguente equazione: Tp per l'ultima posizione doppia ci copre tutte le perdite fluttuanti + il profitto dell'ultima posizione .

3- Ritorno al lotto iniziale .

Pubblicalo come lavoro nella sezione Freelance.

Motivazione: