1. Şimdi ekran çözünürlüğüne ve ölçeğine bakın. 8.1'de nasıl yapacağımı bilmiyorum, şimdi 10'dayım. Açıkça tüm kontrollerin yerini değiştirmişsiniz. Tipik bir resim, standart bir ölçek için bir program yazdığınızda ve kullanıcı genellikle büyütülmüş olanı ayarladığınızda ortaya çıkar. Küçük ekranlı bir dizüstü bilgisayarınız yok, değil mi? Genellikle artarlar, tk. küçük parçaları görmek zordur.
10-ke'de nasıl yapılandırıldığı aşağıda açıklanmıştır.
2. Standardı koymak gerekir - 100%
1. "Büyük" ekranlı bir dizüstü bilgisayarım var... :-)
Vladimir Tkach : F7 tarafından çağrılan pencerede Expert Advisor'ın parametrelerini bir satır yorumu ile nasıl ayıracağımı hatırlayamıyorum ve belgelerde bulamıyorum.
bir gösterge kodu var. Ask ve teklif satırlarını hesaplar ve çizer + Sec_at_Num_Aver_of_Ticks saniye başına alınan X yeni Num_Aver_of_Ticks onaylarının ortalama hızını hesaplar. X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
Expert Advisor'da bu X değişkeninin değerini (başlatma işlevinin sonuna bakın) nasıl hesaplayabilirim?
//+------------------------------------------------------------------//////////+------------------------------------------------------------------#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 );
}
//+------------------------------------------------------------------+
bir gösterge kodu var. Ask ve teklif satırlarını hesaplar ve çizer + Sec_at_Num_Aver_of_Ticks saniye başına alınan X yeni Num_Aver_of_Ticks onaylarının ortalama hızını hesaplar. X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
Expert Advisor'da bu X değişkeninin değerini (başlatma işlevinin sonuna bakın) nasıl hesaplayabilirim?
Bir tabletteki koda bakmak zor, ancak cevap kendini gösteriyor - ara belleğe X değerini yazın.
1. Şimdi ekran çözünürlüğüne ve ölçeğine bakın. 8.1'de nasıl yapacağımı bilmiyorum, şimdi 10'dayım. Açıkça tüm kontrollerin yerini değiştirmişsiniz. Tipik bir resim, standart bir ölçek için bir program yazdığınızda ve kullanıcı genellikle büyütülmüş olanı ayarladığınızda ortaya çıkar. Küçük ekranlı bir dizüstü bilgisayarınız yok, değil mi? Genellikle artarlar, tk. küçük parçaları görmek zordur.
10-ke'de nasıl yapılandırıldığı aşağıda açıklanmıştır.
2. Standardı koymak gerekir - 100%
1. "Büyük" ekranlı bir dizüstü bilgisayarım var... :-)
2. öyle yaptı.
Yardımın için teşekkürler...
1. "Büyük" ekranlı bir dizüstü bilgisayarım var... :-)
2. öyle yaptı.
Yardımın için teşekkürler...
Ayrıca soruyu okurken izni de düşündüm - cevapla benden öndeydiler.
anlıyorsunuz - herhangi bir cihazın tüm ekranları için bir platform yazmak gerçekçi değil)
Ayrıca soruyu okurken izni de düşündüm - benden önce geldiler.
anlıyorsunuz - herhangi bir cihazın tüm ekranları için bir platform yazmak gerçekçi değil)
Senks... :-) Uzun zamandır burada değildim... Şeyler... :-)
Hepsi aynı yüzler. Ne memnun!
Görülecek çok şey olmasa da...
Ayrıca soruyu okurken izni de düşündüm - cevapla benden öndeydiler.
anlıyorsunuz - herhangi bir cihazın tüm ekranları için bir platform yazmak gerçekçi değil)
F7 tarafından çağrılan pencerede Expert Advisor'ın parametrelerini bir satır yorumu ile nasıl ayıracağımı hatırlayamıyorum ve belgelerde bulamıyorum.
Excel'de nasıl görünür ))
Her şey harika çalışıyor!!!! Algoritma ile ilgili değildi. Soru kaldırıldı .
Dört için burada karar verdi:
bir gösterge kodu var. Ask ve teklif satırlarını hesaplar ve çizer + Sec_at_Num_Aver_of_Ticks saniye başına alınan X yeni Num_Aver_of_Ticks onaylarının ortalama hızını hesaplar. X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
Expert Advisor'da bu X değişkeninin değerini (başlatma işlevinin sonuna bakın) nasıl hesaplayabilirim?
Dört için burada karar verdi:
bir gösterge kodu var. Ask ve teklif satırlarını hesaplar ve çizer + Sec_at_Num_Aver_of_Ticks saniye başına alınan X yeni Num_Aver_of_Ticks onaylarının ortalama hızını hesaplar. X = Num_Aver_of_Ticks / (time_s - ExtMapBuffer3[Num_Aver_of_Ticks]);
Expert Advisor'da bu X değişkeninin değerini (başlatma işlevinin sonuna bakın) nasıl hesaplayabilirim?
Bir tabletteki koda bakmak zor, ancak cevap kendini gösteriyor - ara belleğe X değerini yazın.
Sayesinde. Artyom. Aynısı benim için de geçerli... :-)
Bu indiyi uzun zaman önce yazdım ve kod tabanından Rosha kodunu temel aldım.