1. ora guarda la risoluzione e la scala dello schermo. Non so come farlo su 8.1, io stesso sono su 10 al momento. Hai chiaramente tutti i controlli spostati. È tipico quando si scrive un programma per una scala standard, e l'utente di solito lo imposta su una scala più grande. Non hai un notebook con uno schermo piccolo, vero? Di solito fanno lo zoom perché è difficile vedere i piccoli elementi.
Questo è il modo in cui è impostato su 10.
2. Dovete impostarlo su standard - 100%.
1. Ho un portatile con uno schermo "grande"... :-)
Anch'io stavo pensando alla risoluzione, ma quando ho letto la domanda, la risposta mi ha preceduto.
Capite voi stessi - non è realistico scrivere una piattaforma per tutti gli schermi di qualsiasi dispositivo)
Sì, mi ricordo che quando abbiamo scritto per Windows e iniziato a consegnare widescreen ai clienti, abbiamo avuto un sacco di problemi con la riprogettazione della GUI
Vladimir Tkach: Non ricordo e non riesco a trovare nella documentazione come dividere la linea di commento dei parametri EA, nella finestra chiamata da F7.
sinputstring separator = ""; //в комментарий записать пустой символ "Alt+(Num)255"
C'è un codice indicatore. Conta e disegna le linee asc e bid + conta la velocità media X dei tick freschi Num_Aver_of_Ticks ricevuti in secondi Sec_at_Num_Aver_of_Ticks. X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
Come faccio a leggere il valore di questa variabile X (vedi fine della funzione start) nell'EA?
//+------------------------------------------------------------------//////////+------------------------------------------------------------------#property copyright"ROMANBEST"#property link"rshiredchenko@mail.ru"#property indicator_separate_window#property indicator_buffers2#property indicator_color1 clrLimeGreen#property indicator_color2 clrBlue// Цвет второй линии//#property indicator_color3 clrGray // Цвет третьей линии - гистограммы//---- buffersexternint MaxDrawTicks=100;
externint Num_Aver_of_Ticks=15;
//--- Создаём динамические массивыdouble ExtMapBuffer1[]; // Индикаторный массив значений цен Biddouble ExtMapBuffer2[]; // Индикаторный массив значений цен Ask // Кол-во тиков для среднего Num_Aver_of_Ticks / кол-во секунд, за которое эти тики поступили // При обращении к любому члену массива по индексу (допустим i) нужно убедиться что i>=0 и i<ArraySize(High) double ExtMapBuffer3[]; // Массив значений времени в сек. с момента запуска индикатора
int size; // Вспомогательная переменная для массива// При обращении к любому члену массива по индексу (допустим i) нужно убедиться что i>=0 и i<ArraySize(High) int myBars;
int i;
int delimeterCounter;
int _start,tickCounter;
double Sec_at_Num_Aver_of_Ticks; // кол-во секунд, за которое поступило среднее количество тиков для расчёта // (Num_Aver_of_Ticks)//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
//---- indicatorsSetIndexBuffer(0, ExtMapBuffer1); // Назначение массива буферуSetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2); // Стиль линии SetIndexEmptyValue(0,0.0);
SetIndexBuffer(1, ExtMapBuffer2); // Назначение массива буферуSetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2); // Стиль линии SetIndexEmptyValue(1,0.0);
//--- устанавливаем размер динамического массиваif(ArrayResize(ExtMapBuffer3,MaxDrawTicks)<0) {Print(" Ошибка в изменении размера массива времени поступления тиков "); return(false);}
//--- установим индексацию для буфера как в таймсерии для динамического массива// ArraySetAsSeries(ExtMapBuffer3,true);//--- Возвращает количество элементов указанного массива.
size=ArraySize(ExtMapBuffer3);
if (size>0) Print("Размер массива: ",size);
elsePrint("Ошибка. Массив пустой ",size);
// for(int i=0;i<=100;i++) Print(" ExtMapBuffer3[i] = ", ExtMapBuffer3[i]); //--- заполняем начальные 50 элементов значением 4// ArrayFill(ExtMapBuffer3,0,50,4);//--- заполняем 50 элементов (начиная с 50-го) значением 8// ArrayFill(ExtMapBuffer3,50,50,8);//--- выводим значения всех элементов// for(int i=0;i<ArraySize(ExtMapBuffer3);i++) Print(" i = ", i, " ExtMapBuffer3 = ", ExtMapBuffer3[i]); // ------------Print("Обнуляем тики и время их поступления");
for (i=Bars-1;i>=0;i--) { ExtMapBuffer1[i]=0.0; ExtMapBuffer2[i]=0.0; ExtMapBuffer3[i]=0.0;}
//--- запомним начальное значение для подсчёта секунд c момента старта системы
_start = GetTickCount();
//----return(0);
}
//+------------------------------------------------------------------+//| Custom indicator deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| сдвинем массив |//+------------------------------------------------------------------+void SetDelimeter()
{
//----string delimeterDate=TimeToStr(Time[0]);
if (myBars!=0)
{
Print("Ставим разделитель");
int handle=WindowFind("Ticks");
if(!ObjectCreate(delimeterDate,OBJ_VLINE,handle,Time[0],0))
{
Print("Неудачная попытка создания разделителя в окне ",
handle," по времени ",TimeToStr(CurTime()));
Print("Ошибка №",GetLastError(),", имя разделителя ",delimeterDate);
}
else
{
ObjectSet(delimeterDate,OBJPROP_COLOR,DarkGreen);
ObjectSet(delimeterDate,OBJPROP_STYLE,STYLE_DASHDOT);
ObjectsRedraw();
}
}
//----
}
//+------------------------------------------------------------------+//| сдвинем массив |//+------------------------------------------------------------------+void ShiftArray()
{
//----int V_lines;
string delimeterName;
datetime firstTime;
int BarFirstTime;
if (tickCounter>2*MaxDrawTicks)
{
for (i=tickCounter;i>=MaxDrawTicks;i--) { ExtMapBuffer1[i]=0.0; ExtMapBuffer2[i]=0.0; ExtMapBuffer3[i]=0.0; }
tickCounter=MaxDrawTicks;
}
for(int cnt=tickCounter;cnt>0;cnt--)
{
ExtMapBuffer1[cnt]=ExtMapBuffer1[cnt-1];
ExtMapBuffer2[cnt]=ExtMapBuffer2[cnt-1];
ExtMapBuffer3[cnt]=ExtMapBuffer3[cnt-1];
}
V_lines=ObjectsTotal();
for (int z=0;z<V_lines;z++)
{
delimeterName=ObjectName(z);
if (ObjectFind(delimeterName)!=-1)
{
if (ObjectType(delimeterName)==OBJ_VLINE)
{
firstTime=ObjectGet(delimeterName,OBJPROP_TIME1);
BarFirstTime=iBarShift(NULL,0,firstTime);
firstTime=Time[BarFirstTime+1];
ObjectSet(delimeterName,OBJPROP_TIME1,firstTime);
}
}
}
//----
}
//+------------------------------------------------------------------+//| признак нового бара |//+------------------------------------------------------------------+bool isNewBar()
{
//----bool res=false;
if (myBars!=Bars)
{
res=true;
myBars=Bars;
}
//----return(res);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+int start()
{
//--- выводим значения всех элементов// for(int i=0;i<ArraySize(ExtMapBuffer3);i++) Print(" i = ", i, " ExtMapBuffer3 = ", ExtMapBuffer3[i]); //--- получим время в миллисекундах, прошедших с момента старта системы uint time_ms=GetTickCount() - _start;
//--- получим время в секундах, прошедших с момента старта системы double time_s=time_ms/1000;
double X; // вспомогательная переменная int counted_bars=IndicatorCounted();
//----if (isNewBar())
{
// установить разделитель//tickCounter++;
SetDelimeter();
ExtMapBuffer1[0]=Bid;
ExtMapBuffer2[0]=Ask;
//ExtMapBuffer3[0]= time_s; //--- заполняем c tickCounter элементов значением time_s// ArrayFill(ExtMapBuffer3,tickCounter,1,time_s); if (tickCounter >= 0 && tickCounter < ArraySize(ExtMapBuffer3) && tickCounter <= Num_Aver_of_Ticks)
{
//--- заполняем начальный и последующие элементы значениями time_sif (tickCounter == 0) ArrayFill(ExtMapBuffer3,0,1,time_s);
elseArrayFill(ExtMapBuffer3,tickCounter,1,time_s);
//--- выводим значение элементаfor( i=0;i<1;i++) Print(" tickCounter = ", tickCounter, " ExtMapBuffer3 = ", ExtMapBuffer3[tickCounter]);
}
}
else
{
tickCounter++;
ShiftArray();
ExtMapBuffer1[0]=Bid;
ExtMapBuffer2[0]=Ask;
ExtMapBuffer3[0]= time_s;
// массив // индекс начального элемента // количество элементов // значение, которым заполняется массив //--- заполняем начальные (с нуля) tickCounter элементов значением time_s//ArrayFill(ExtMapBuffer3,tickCounter,1,time_s); // X = tickCounter/time_s; if (tickCounter >= 0 && tickCounter < ArraySize(ExtMapBuffer3) && tickCounter <= Num_Aver_of_Ticks)
{
//--- заполняем начальный и последующие элементы значениями time_sif (tickCounter == 0) ArrayFill(ExtMapBuffer3,0,1,time_s);
elseArrayFill(ExtMapBuffer3,tickCounter,1,time_s);
//--- выводим значение элементаfor( i=0;i<1;i++) Print(" tickCounter = ", tickCounter, " ExtMapBuffer3 = ", ExtMapBuffer3[tickCounter]);
}
}
/*
if (tickCounter > Num_Aver_of_Ticks) то ищем индекс массива с минимумом http://docs.mql4.com/ru/array/arrayminimum и заполняем его значением секунд
следующего тика... Потом считаем разность между этим значением и следующим минимумом...
Псле заполнения массива до ExtMapBuffer3[Num_Aver_of_Ticks]. Читать минимум, максимум. Переписываем минимум. Разница значений
ExtMapBuffer3[максимум] и ExtMapBuffer3[минимум] будет время в секундах поступления Num_Aver_of_Ticks.
*/
Sec_at_Num_Aver_of_Ticks = time_s - ExtMapBuffer3[Num_Aver_of_Ticks];
if (tickCounter >= Num_Aver_of_Ticks && (time_s - ExtMapBuffer3[Num_Aver_of_Ticks])!=0)
X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
if (time_s!=0)
Comment(
"tickCounter = ", tickCounter, "\n",
"secondCounter = ", NormalizeDouble(time_s,Digits) , "\n",
"ExtMapBuffer1[0] = ", NormalizeDouble(ExtMapBuffer1[0],Digits) , "\n",
"ExtMapBuffer2[0] = ", NormalizeDouble(ExtMapBuffer2[0],Digits) , "\n",
"ExtMapBuffer3[0] = ", NormalizeDouble(ExtMapBuffer3[0],Digits) , "\n",
"Average speed for average quantity of tics = ", NormalizeDouble(X,2), " Num_Aver_of_Ticks/Sec_at_Num_Aver_of_Ticks ", "\n",
"Num_Aver_of_Ticks = ", Num_Aver_of_Ticks," Время в секундах поступления Num_Aver_of_Ticks = ",Sec_at_Num_Aver_of_Ticks , "\n",
"Average speed since running = ", NormalizeDouble(tickCounter/time_s,Digits) , " All Tick/All Second ", "\n",
"") ;
//----return(0);
}
//+------------------------------------------------------------------+
C'è un codice indicatore. Conta e disegna le linee asc e bid + conta il tasso medio X di tick freschi Num_Aver_of_Ticks ricevuti per secondi Sec_at_Num_Aver_of_Ticks. X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
Come faccio a leggere il valore di questa variabile X (vedi fine della funzione start) nell'EA?
È difficile guardare il codice sul tablet, ma la risposta è scrivere il valore di X nel buffer.
1. ora guarda la risoluzione e la scala dello schermo. Non so come farlo su 8.1, io stesso sono su 10 al momento. Hai chiaramente tutti i controlli spostati. È tipico quando si scrive un programma per una scala standard, e l'utente di solito lo imposta su una scala più grande. Non hai un notebook con uno schermo piccolo, vero? Di solito fanno lo zoom perché è difficile vedere i piccoli elementi.
Questo è il modo in cui è impostato su 10.
2. Dovete impostarlo su standard - 100%.
1. Ho un portatile con uno schermo "grande"... :-)
2. Così ho fatto.
Grazie per l'aiuto...
1. Ho un notebook con uno schermo "grande"... :-)
2. Così ho fatto.
Grazie per l'aiuto...
Ho pensato anche alla risoluzione, mentre leggevo la domanda - sono stato battuto alla risposta.
Capite voi stessi - non è realistico scrivere una piattaforma per tutti gli schermi di qualsiasi dispositivo)
Anch'io stavo pensando alla risoluzione, quando ho letto la domanda, mi hai preceduto.
Sai, è impossibile scrivere una piattaforma per tutti gli schermi di qualsiasi dispositivo)
Sens... :-) Non venivo qui da un po'... Affari... :-)
Le stesse vecchie facce. Cosa c'è di buono!
Anche se non se ne vedono molti...
Anch'io stavo pensando alla risoluzione, ma quando ho letto la domanda, la risposta mi ha preceduto.
Capite voi stessi - non è realistico scrivere una piattaforma per tutti gli schermi di qualsiasi dispositivo)
Non ricordo e non riesco a trovare nella documentazione come dividere la linea di commento dei parametri EA, nella finestra chiamata da F7.
Come renderlo come in Excel ))
Tutto funziona alla grande!!!! Non era l'algoritmo. Ilproblema è risolto.
Deciso qui dal quadruplo:
C'è un codice indicatore. Conta e disegna le linee asc e bid + conta la velocità media X dei tick freschi Num_Aver_of_Ticks ricevuti in secondi Sec_at_Num_Aver_of_Ticks. X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
Come faccio a leggere il valore di questa variabile X (vedi fine della funzione start) nell'EA?
Deciso qui dal quadruplo:
C'è un codice indicatore. Conta e disegna le linee asc e bid + conta il tasso medio X di tick freschi Num_Aver_of_Ticks ricevuti per secondi Sec_at_Num_Aver_of_Ticks. X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
Come faccio a leggere il valore di questa variabile X (vedi fine della funzione start) nell'EA?
È difficile guardare il codice sul tablet, ma la risposta è inevitabile - scrivere il valore Х nel buffer.
Grazie. Artyom. Lo stesso vale per me... :-)
Ho scritto questo atto molto tempo fa, e ho usato il codice di Rosha di kodobase come base.