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

 

Lo descriverò bene in dettaglio.

L'indicatore principale si trova sulla coppia euro-dollaro. Questo indicatore chiama indicatori di altre coppie di oro, indice del dollaro e valuta euro. Questo indicatore lavora su coppie di 1 minuto e a volte non ci sono quotazioni sull'indice del dollaro, per esempio, l'euro ha una candela a 15 minuti, ma l'indice del dollaro non ha una tale candela, l'indice è congelato e non ticchetta. Poi, dopo qualche tempo, la candela a 16 minuti appare sull'EUR e quella a 16 minuti sull'indice USD. Qual è la domanda? Come sincronizzare il calcolo dell'indicatore, in modo che venga contato solo quando le barre di tutti i simboli chiamati coincidono nel tempo????

Ho provato questa costruzione

if((iTime(NULL,0,i)==iTime("XAUUSD",0,i))&&(iTime(NULL,0,i)==iTime("EURJPY",0,i))){

Sembra essere cool, ma il calcolo viene eseguito solo per il giorno corrente, non ci sono segnali per i giorni precedenti. Forse ci sono soluzioni standard per la sincronizzazione dei simboli????

 
nikelodeon:

Lo descriverò bene in dettaglio.

L'indicatore principale si trova sulla coppia euro-dollaro. Questo indicatore chiama indicatori di altre coppie di oro, indice del dollaro e valuta euro. Questo indicatore lavora su coppie di 1 minuto e a volte non ci sono quotazioni sull'indice del dollaro, per esempio, l'euro ha una candela a 15 minuti, ma l'indice del dollaro non ha una tale candela, l'indice è congelato e non ticchetta. Poi, dopo qualche tempo, la candela a 16 minuti appare sull'EUR e quella a 16 minuti sull'indice USD. Qual è la domanda? Come sincronizzare il calcolo dell'indicatore, in modo che venga contato solo quando le barre di tutti i simboli chiamati coincidono nel tempo????

Ho provato questa costruzione

Sembra essere cool, ma il calcolo viene eseguito solo per il giorno corrente, non ci sono segnali per i giorni precedenti. Forse c'è una soluzione standard per la sincronizzazione dei simboli????

Prova in un timer nel ciclo SymbolInfoTick() per ottenere dati sui simboli. E lì già sincronizzare come avete bisogno.

Il fatto è che sul simbolo corrente, il programma inizia solo con l'arrivo del tick per questo simbolo. Pertanto, non sarete in grado di ottenere le zecche dagli altri simboli in tempo. Ma in un timer che funziona indipendentemente dai ticchettii, sarete in grado di ottenere i ticchettii da altri simboli.

Il timer può essere impostato al millisecondo se avete bisogno di una risposta veloce ad un tick su un simbolo che non è il vostro.

 
artmedia70:
Lei ha una domanda terribilmente confusa e solo lei può capirla.

VIVAI A TE!!! GRAZIE! BUONE VACANZE!

Altri 2 punti, caro. 1) è possibile rimuovere l'indicatore da una finestra separata?

2)aggiungere una funzione, se l'ATR corrente è superiore all'ATR (per il periodo H), allora l'ATR sopra la barra, sarebbe evidenziato in un colore diverso? o il valore sarebbe scritto solo sopra questa barra?

 
kocunyc89:

VIVAI A TE!!! GRAZIE! BUONE VACANZE!

Altri 2 punti, caro. 1) È possibile rimuovere l'indicatore da una finestra separata?

2)aggiungere una funzione, se l'ATR corrente è più dell'ATR (per il periodo H), allora l'ATR sopra la barra sarebbe evidenziato in un colore diverso? o il valore sarebbe scritto solo sopra questa barra?

Oh, caro... Ecco, modificatelo voi stessi:

//+------------------------------------------------------------------+
//|                                                 iATRwithData.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot ATR
#property  indicator_label1  "ATR"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrDodgerBlue
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//+------------------------------------------------------------------+
//| enums                                                          |
//+------------------------------------------------------------------+
enum enumYN
  {
   enYes=1, // Yes
   enNo=0,  // No
  };
//+------------------------------------------------------------------+
//| input parameters                                                 |
//+------------------------------------------------------------------+
input int      PeriodATR=14;           // ATRs calculation period
int periodATR=(PeriodATR<1)?1:PeriodATR;
sinput enumYN DrawGraphic=enYes;       // Drawing ATR data over the candles
sinput int StartDrawingBar=100;        // Max bar for drawing ATRs data
int startDrawingBar;
sinput int TextSize=5;                 // Text size
sinput color TextColor=clrDodgerBlue;  // Text color
//--- indicator buffers
double         BufferATR[];
string Prefix;
//+------------------------------------------------------------------+
//| Classes                                                          |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferATR);
   
   Prefix="iATRwd("+IntegerToString(periodATR)+")";
   IndicatorSetString(INDICATOR_SHORTNAME,Prefix);
   int bars=Bars(Symbol(),Period());
   startDrawingBar=(StartDrawingBar<1)?1:(StartDrawingBar>bars)?bars:StartDrawingBar;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- delete graphics
   ObjectsDeleteAll(0,Prefix,0);
//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<periodATR) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) limit=rates_total-periodATR-1;
   //---
   for(int i=limit; i>=0; i--) {
      BufferATR[i]=iATR(Symbol(),Period(),periodATR,i);
      if(DrawGraphic && i<startDrawingBar) {
         string tm_txt=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
         string nm=Prefix+"_"+tm_txt;
         string text=IntegerToString(int(BufferATR[i]/Point()));
         string tooltip="ATRs period for candle on "+tm_txt+" is "+text;
         SetArrowText(0,nm,TextColor,text,0,ANCHOR_LOWER,time[i],high[i],"Arial",TextSize,tooltip);
         }
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Functions                                                        |
//+------------------------------------------------------------------+
void SetArrowText(long chart_id, string name, color text_color, string text, int sub_window, 
                  long text_anchor, long text_time1, double text_price1, string font="Arial", long font_size=5, 
                  string tooltip="\n", bool selection=false, bool hidden=true) {
   
   if(ObjectFind(chart_id,name)<0) ObjectCreate(chart_id,name,OBJ_TEXT,sub_window,text_time1,text_price1);
   ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,text_anchor);
   ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,font_size);
   ObjectSetString(chart_id,name,OBJPROP_FONT,font);
   ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_id,name,OBJPROP_COLOR,text_color);
   ObjectSetInteger(chart_id,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetInteger(chart_id,name,OBJPROP_TIME1,text_time1);
   ObjectSetDouble(chart_id,name,OBJPROP_PRICE1,text_price1);
   ObjectSetInteger(chart_id,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_id,name,OBJPROP_HIDDEN,hidden);
   ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,tooltip);
}
//+------------------------------------------------------------------+

O vuoi che faccia tutto anche per te?

 
artmedia70:

Oh, caro... Qui, lo fai da solo:

O devo farlo anch'io per te?

Grazie mille, bravo!
 
kocunyc89:
Grazie mille! uomo gentile!
Siete i benvenuti.
 
Buona sera, è possibile fare in modo che l'indicatore visualizzi i dati del buffer in due finestre, una parte sul grafico principale e una parte nel sub-end? Se è così, per favore consigliate come ...
 
artmedia70:

Non c'è di che. Se non è un segreto, perché avete bisogno di un timestamp che mostri il tempo dell'ultima esecuzione del vostro programma - il tempo in esso non cambierà.

Solo una curiosità inutile...

È per il grafico a tick offline.



 
Salve.

Quali funzioni possono essere utilizzate per inviare variabili tra due terminali MT4? Se possibile, aggiungete un link alla documentazione.
 
abeiks Quali funzioni sono disponibili per inviare variabili tra due terminali MT4?

int Flags=FILE_WRITE+FILE_TXT+FILE_COMMON;

int Info = FileOpen(fName,Flags);

FileWrite(Info,What's Up); Sull'altro terminale, leggere. Cursore su FileOpen e F1 - ottenere aiuto

Motivazione: