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

 
Artyom Trishkin:

Nel tester su un simbolo diverso? O in demo/reale su un simbolo diverso? O nel tester di questo simbolo? O su demo/reale su questo simbolo?

Perché devi tirare fuori tutto da te?

Qual è il punto? Che differenza fa dove l'hai provato? La domanda è se Punto = 0. E se può, come faccio a scrivere il codice correttamente in modo da non incontrare un errore: divisione per zero?
 
LuckySith:

Scusate, sono molto nerd - non lo capisco proprio.
Forse avete l'indicatore più semplice con un codice di alcuni, ho un'analogia per capire? Perché non sono riuscito a trovarne uno.

Ho un codice molto semplice che mette dei punti al centro della barra. Come faccio a far apparire il testo quando ci passo sopra, o un riquadro, qualsiasi cosa.



#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Black
//---- input parameters
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,159);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars;
//----  
   for(int i=limit; i>=0; i--)
     {
      double       fabody0 = fabs(Close[i]-Open[i]);
      double       fabody1 = fabs(Close[i+1]-Open[i+1]);
      double       fabody2 = fabs(Close[i+2]-Open[i+2]);
      double       fabody3 = fabs(Close[i+3]-Open[i+3]);
      double       fabody4 = fabs(Close[i+4]-Open[i+4]);
      double       fabody5 = fabs(Close[i+5]-Open[i+5]);
      double       fabody6 = fabs(Close[i+6]-Open[i+6]);
      double       fabody7 = fabs(Close[i+7]-Open[i+7]);
      if((fabody0>fabody1) && (fabody0>fabody2) && (fabody0>fabody3) && (fabody0>fabody4) && (fabody0>fabody5) && (fabody0>fabody6) &&(Volume[i]>Volume[i+1]))
      {  
         if (((Close[i]>Open[i])&&(Low[i]+(High[i]-Low[i])/2>Low[i+1]+(High[i+1]-Low[i+1])*0.9))||((Close[i]<Open[i])&&(Low[i]+(High[i]-Low[i])/2<Low[i+1]+(High[i+1]-Low[i+1])*0.1)))
         ExtMapBuffer1[i]=(iHigh(Symbol(),0,i)+iLow(Symbol(),0,i))/2;
      }
     }
//----
   return(0);
  }
Prova
File:
gmxdk8j.mq4  6 kb
 
Gevorg Hakobyan:
Dove vuoi arrivare? Che differenza fa dove l'hai provato? La domanda è se Punto = 0. E se può, come dovrei scrivere il codice corretto in modo da non incontrare un errore: divisione per zero?
Fai come vuoi.
Quindi controlla il divisore a zero prima di dividere.
Pensavo che foste interessati alla causa, non all'effetto, e alla stampella appropriata.
 
Artyom Trishkin:
Fai come vuoi.
Quindi controlla il divisore a zero prima di dividere.
Pensavo che foste interessati alla causa, non all'effetto, e alla stampella appropriata.
Non ho letto tutto il dialogo, ma sospetto un problema con la stampa della quinta cifra decimale.
 
Alexey Viktorov:
Non ho letto tutto il dialogo, ma sospetto un problema con la stampa della quinta cifra decimale.
No, divide per Point() e ottiene una divisione per zero.
Ecco perché sto cercando di ottenere una risposta coerente su come e dove prende i dati dei simboli.

 
Artyom Trishkin:
No, divide per Point() e ottiene la divisione per zero.
Sto cercando di avere una risposta chiara su come e dove prende i dati per il simbolo.

se(v=="NZD")
{
h=(iClose("NZDUSD",p,b)-iOpen("NZDUSD",p,b))/MarketInfo("NZDUSD",MODE_POINT)+
(iOpen("EURNZD",p,b)-iClose("EURNZD",p,b))/MarketInfo("EURNZD",MODE_POINT)+
(iOpen("GBPNZD",p,b)-iClose("GBPNZD",p,b))/MarketInfo("GBPNZD",MODE_POINT)+
(iOpen("AUDNZD",p,b)-iClose("AUDNZD",p,b))/MarketInfo("AUDNZD",MODE_POINT)+
(iClose("NZDJPY",p,b)-iOpen("NZDJPY",p,b))/MarketInfo("NZDJPY",MODE_POINT)+
(iClose("NZDCAD",p,b)-iOpen("NZDCAD",p,b))/MarketInfo("NZDCAD",MODE_POINT)+
(iClose("NZDCHF",p,b)-iOpen("NZDCHF",p,b))/MarketInfo("NZDCHF",MODE_POINT);
}
 
Alexey Viktorov:
Non ho letto tutto il dialogo, ma sospetto un problema con la stampa della quinta cifra decimale.
Potrebbe essere questo il problema?
 
Gevorg Hakobyan:
Potrebbe essere questo il problema?
No. È solo l'invisibilità della quinta cifra quando si stampa e negli avvisi.
 
Alekseu Fedotov:
Prova
In generale, questo è ciò di cui avete bisogno, ma il problema è che la descrizione sarà abbastanza grande, e questo metodo può letteralmente scrivere un paio di parole - il resto semplicemente non viene visualizzato
 

Salve.

Per favore, aiutatemi.

Ora il lotto di ogni ordine seguente sta aumentando in 1, 2, 3, 4, 5...

Voglio aumentare il lotto non per ordine, ma a passi di 3, quindi 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3...


extern double   LotStop        = 0.01;
extern double   Plus_LotStop   = 0.01;
extern double   Plus_N_ORD  = 3;        //каждые N ордеров
void OnTick()
  {
//---
      for (int i=1; i<=OrdersStop; i++)
   {
         if((Close[1]<Open[1]&&Close[2]>Open[2]&&NumberOfPositions(Symbol(), -1,_Magic)<1))
         {
            OPENORDER (OP_BUYSTOP,PriceBS,LOTs,_Magic,i);
            numB++;
            PriceBS = NormalizeDouble(PriceBS+Step_Stop*Point,Digits);
          
            OPENORDER (OP_SELLSTOP,PriceSS,LOTs,_Magic,i);
            numS++;
            PriceSS = NormalizeDouble(PriceSS-Step_Stop*Point,Digits);
         }
      
      LOTs=LOTs+Plus_LotStop;
      }
  }