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????
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????
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?
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_buffers1#property indicator_plots1//--- 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 |//+------------------------------------------------------------------+inputint PeriodATR=14; // ATRs calculation periodint periodATR=(PeriodATR<1)?1:PeriodATR;
sinput enumYN DrawGraphic=enYes; // Drawing ATR data over the candlessinputint StartDrawingBar=100; // Max bar for drawing ATRs dataint startDrawingBar;
sinputint TextSize=5; // Text sizesinputcolor TextColor=clrDodgerBlue; // Text color//--- indicator buffersdouble BufferATR[];
string Prefix;
//+------------------------------------------------------------------+//| Classes |//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(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 |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- delete graphicsObjectsDeleteAll(0,Prefix,0);
//---
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &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 callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
}
//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &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);
}
//+------------------------------------------------------------------+
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 ...
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à.
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 ci sono soluzioni standard per la sincronizzazione dei simboli????
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.
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?
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:
O vuoi che faccia tutto anche per te?
Oh, caro... Qui, lo fai da solo:
O devo farlo anch'io per te?
Grazie mille! uomo gentile!
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.
Quali funzioni possono essere utilizzate per inviare variabili tra due terminali MT4? Se possibile, aggiungete un link alla documentazione.
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