[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 145

 

Grazie per i consigli. Tutto funziona, ma quando si installa l'indicatore è disegnato in modo strano (vedi grafico). L'indentazione (in barre) dal bordo sinistro della finestra del grafico alla linea gialla verticale è sempre INUTILE per QUALSIASI numero di barre visibili nella finestra ed è uguale a otto barre. Una volta che queste otto barre vanno oltre il limite sinistro della finestra, tutte le linee del grafico appaiono immediatamente e poi tutto è normale. Si può risolvere e come?


#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Red
#property indicator_color3 Aqua
#property indicator_color4 DarkOrange
#property  indicator_width1  2
#property  indicator_width3  2
//--- buffers
double Macd1Buffer[];
double Signal1Buffer[];
double Macd2Buffer[];
double Signal2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,Macd1Buffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,Signal1Buffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,Macd2Buffer);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,Signal2Buffer);
   
   IndicatorDigits(Digits);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {   
      double max1=-0.01,min1=0.01,
             max2=-0.01,min2=0.01,
             max_M1=-0.01,min_M1=0.01,
             max_M2=-0.01,min_M2=0.01,
             max_S1=-0.01,min_S1=0.01,
             max_S2=-0.01,min_S2=0.01;
             
       
 
   int bars_counted=WindowBarsPerChart()-1,
       limit;  
       limit=bars_counted;       


      
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
   
   { 
     Macd1Buffer[i]=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i);
     Macd2Buffer[i]=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,26,0,MODE_EMA,PRICE_CLOSE,i);
      
           max_M1=MathMax(Macd1Buffer[i],max_M1);
           min_M1=MathMin(Macd1Buffer[i],min_M1);
           
           max_M2=MathMax(Macd2Buffer[i],max_M2);
           min_M2=MathMin(Macd2Buffer[i],min_M2);
   }
   
   for( i=0; i<limit; i++)
           
   {
      Signal1Buffer[i]=iMAOnArray(Macd1Buffer,Bars,5,0,MODE_SMA,i);
      Signal2Buffer[i]=iMAOnArray(Macd2Buffer,Bars,9,0,MODE_SMA,i);
      
           
           max_S1=MathMax(Signal1Buffer[i],max_S1);
           min_S1=MathMin(Signal1Buffer[i],min_S1);
           
           max_S2=MathMax(Signal2Buffer[i],max_S2);
           min_S2=MathMin(Signal2Buffer[i],min_S2);         
   }          
           max1=MathMax(max_M1,max_S1);
           min1=MathMin(min_M1,min_S1);
             
           
            
      

//---- done 
   
 
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1,
               "\n"," max_M1 = ",max_M1,
               "\n"," min_M1 = ",min_M1,
               "\n"," max_S1 = ",max_S1,
               "\n"," min_S1 = ",min_S1,
               "\n"," max_M2 = ",max_M2,
               "\n"," min_M2 = ",min_M2,
               "\n"," max_S2 = ",max_S2,
               "\n"," min_S2 = ",min_S2,
               "\n"," max1 = ",max1,
               "\n"," min1 = ",min1,    
               "\n"," max2 = ",max2,
               "\n"," min2 = ",min2);
         
             
         
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
MK07:

Grazie per i consigli. Funziona, ma quando si installa l'indicatore è disegnato in modo strano (vedi grafico). L'indentazione (in barre) dal bordo sinistro della finestra del grafico alla linea gialla verticale è sempre INUTILE per QUALSIASI numero di barre visibili nella finestra ed è uguale a otto barre. Non appena queste otto barre vanno oltre il bordo sinistro della finestra, tutte le linee del grafico appaiono immediatamente e poi tutto è normale. Può essere corretto e come?


prova così

   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
 
Ho bisogno di costruire un indicatore su TUTTE le barre VEDUTE nella finestra, e poi trovare il suo massimo e minimo a questo punto! Aiutatemi a risolvere il problema, menzionato nel mio post precedente, ho un esempio, ma non capisco tutto, qualcuno può spiegare queste tre linee una per una?
 // обработка видимых баров.
   int bars_count=WindowBarsPerChart();
   int bar=WindowFirstVisibleBar();
   for(int i=0; i<bars_count; i++,bar--)
     {
      // номера баров уменьшаются, так как нумерация идет в обратном порядке.
      // ...
     } 
 
MK07:
Questa costruzione di codice permette di ricalcolare ad ogni nuovo tick l'indicatore solo a zero e alla prima (per il controllo) barra, invece di ricalcolare nuovamente l'indicatore già calcolato. ho bisogno di costruire un indicatore da TUTTE le barre visibili nella finestra, e poi trovare il suo max e min a questo punto. aiutatemi a risolvere il problema, menzionato nel mio post precedente. c'è un esempio, ma non tutto è chiaro per me. qualcuno può spiegare queste tre stringhe linea per linea?

Non è molto chiaro cosa ti serve, se hai bisogno di trovare il MAX e il MIN delle barre visibili dell'indicatore, prima disegna l'indicatore e poi cerca.

Forse è meglio usare WindowPriceMax(), WindowPriceMin().

 
r772ra:

Stepan2

Opere


C'è un problema con gli array dopo tutto, ma con while

c per funziona senza problemi

))

 

Buon pomeriggio.

Gente, ditemi con cosa testare gli EA. Perché la MT incorporata dà una media del 50% di qualità di simulazione, e la gente sta postando più del 90% sugli screenshot.

 
jusser:

Buon pomeriggio.

Gente, ditemi con cosa testare gli EA. Perché la MT incorporata dà una media del 50% di qualità di simulazione, ma sugli screenshot la gente posta più del 90%.


Se avete l'intera cronologia dei minuti, sarà il 90%. Il 99% si ottiene creando una cronologia di tick fxt voi stessi. Questo di solito è fatto usando le citazioni di dukascoping. Gli script di Google sul tema del 99% di test di qualità

 
Buon pomeriggio, potreste dirmi se c'è un indicatore in MT4 che mostra l'open interest? Se no, può essere sostituito da qualcosa di simile?
 
Ciao, come implementare una condizione nel codice dell'Expert Advisor per impostare lo stesso tipo di ordini 50 pips dopo l'ultimo ordine
 
Armen63:
Ciao, come implementare una condizione nel codice dell'Expert Advisor per impostare lo stesso tipo di ordini 50 pips dopo l'ultimo ordine
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
Motivazione: