Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1087

 
Для каких случаев после описания сигнатуры функции ставят const ? Никак не удаётся найти информацию об этом.
void qwe(int abc) const {...}
 
Похоже тут не найти нормальных знающих людей, только зря зарегался =/
 
K_i_r_i_t_o:
Перенес коммент в начало, а то никто так и не ответил, а очень нужно =/
Можно ли это реализовать: если я нажимаю какую то клавишу, включается одна часть кода индикатора(отвечает за создание объекта ЩЕЛЧКОМ МЫШИ), потом если происходит какое то событие(вторая часть кода, событие может быть, создание того же объекта к примеру), то первая часть кода отключается(а если не сделать этого то объект создается каждым щелчком), и также запустится при нажатии на клавишу, и так по кругу)
Можно. Добавляй блок OnChartEvent. В нём следи за нужными нажатиями, измерениями и описывай реакцию на них согласно задумке.
 
SunnYtheDreamer:
Можно. Добавляй блок OnChartEvent. В нём следи за нужными нажатиями, измерениями и описывай реакцию на них согласно задумке.
Реализовать именно отключение части кода на срок до нажатия клавиши не получается =/  Есть вариант попроще, но тут одна проблема, нужно чтоб i при нажатии клавиши возращало свое значение в начало первого оператора if 
#define VK_D 0x44
void OnChartEvent(const int id,         // идентификатор события   
                  const long& lparam,   // параметр события типа long 
                  const double& dparam, // параметр события типа double 
                  const string& sparam) // параметр события типа string 
{ 
 Comment(__FUNCTION__,": id=",id," lparam=",lparam," dparam=",dparam," sparam=",sparam);

int      y     =(int)dparam;
datetime dt    =0;
double   price =0;  
int      window=0;
int i;
int x=(int)lparam;

if (id==CHARTEVENT_CLICK)
{
ChartXYToTimePrice(0,x,y,window,dt,price);
ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);

if(id==CHARTEVENT_KEYDOWN) 
{ switch(int(lparam)) 
{ case VK_D:
i=rand();
}}}}
 
K_i_r_i_t_o:
Реализовать именно отключение части кода на срок до нажатия клавиши не получается =/  Есть вариант попроще, но тут одна проблема, нужно чтоб i при нажатии клавиши возращало свое значение в начало первого оператора if 
if (id==CHARTEVENT_CLICK)
{
   ChartXYToTimePrice(0,x,y,window,dt,price);
   ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);

   if(id==CHARTEVENT_KEYDOWN) 
   {
      switch(int(lparam)) 
      {
         case VK_D: i=rand();
      }
   }
}
Этот код будет исполнится только если кликнуть мышкой, при этом через 3 строчки кода проверяется событие нажатия клавиши. А эти 3 строчки кода исполнятся за несколько миллисекунд, и даже, если id в течении текущего вызова OnChartEvent способно измениться, то шанс, что в течении времени, исполнения 3х строк кода, будет нажата клавиша = 0%. Очевидно, что проверять id, внутри блока, что запускается при определённом значении id, и ждать там другого значения - бессмысленно. Сначала проверяй нажатие клавиши, в отдельном блоке, сохраняй в переменную номер клавиши или же просто сам факт нажатия нужной клавиши. И этой переменной включай или отключай кусок кода расположенный в блоке для клика мышки.
char key = -1; //эта переменная должна быть объявлена за пределами блока OnCharEvent
if(id==CHARTEVENT_KEYDOWN)
key = lparam;

if (id==CHARTEVENT_CLICK && key == 'D')
{
   ChartXYToTimePrice(0,x,y,window,dt,price);
   ObjectCreate("Trend Line"+i,OBJ_TREND,0,dt,price,dt,price);
   ObjectSetInteger(0,"Trend Line"+i,OBJPROP_SELECTED,true);
   i=rand();
   key = -1;
}
 
SunnYtheDreamer:
Этот код будет исполнится только если кликнуть мышкой, при этом через 3 строчки кода проверяется событие нажатия клавиши. А эти 3 строчки кода исполнятся за несколько миллисекунд, и даже, если id в течении текущего вызова OnChartEvent способно измениться, то шанс, что в течении времени, исполнения 3х строк кода, будет нажата клавиша = 0%. Очевидно, что проверять id, внутри блока, что запускается при определённом значении id, и ждать там другого значения - бессмысленно. Сначала проверяй нажатие клавиши, в отдельном блоке, сохраняй в переменную номер клавиши или же просто сам факт нажатия нужной клавиши. И этой переменной включай или отключай кусок кода расположенный в блоке для клика мышки.

Огромное спасибо!) вот эта строчка которую я искал if (id==CHARTEVENT_CLICK && key == 'D'), никак не мог два события соединить, вот это не работало if (id==CHARTEVENT_CLICK & id==CHARTEVENT_KEYDOWN) Еще раз большое спасибо)

[Удален]  

здравствуйте , у меня есть одна функция , которая считает средний размер свечи по последним n свечам. и иногда выдает вот такие значения: "5e-05.0"  . они мне мешают и не нужны,  к моему стыду я не знаю количественно это сколько и как их отсечь . NormalizeDouble() не помогает . подскажите пожалуйста как такие числа вычислить програмно чтобы отсечь

 
pycha:

здравствуйте , у меня есть одна функция , которая считает средний размер свечи по последним n свечам. и иногда выдает вот такие значения: "5e-05.0"  . они мне мешают и не нужны,  к моему стыду я не знаю количественно это сколько и как их отсечь . NormalizeDouble() не помогает . подскажите пожалуйста как такие числа вычислить програмно чтобы отсечь


5е-05 (5*10 в -5 степени) =  0.00005.
Что бы отсечь, то:
if(val >= 0.00001)
Такие мелкие свечи, в 5 пипсов, только во время штиля, на 5-и знаковом счёте, на низких таймфреймах повстречать возможно. Если дел со скальпингом не имеете, но за n свечей среднее получается иногда столь маленькое, то реализация функции должна вызывать подозрения.
[Удален]  
да , программа работает относительно недалеко от скальпинга, общий посыл я понял. попробую поставить проверку чтобы было не меньше 0.0001 -  мне еще такие разбежности несущественны и если я правильно понял , то будут отсекать ненужные значения
 

подскажите пожалуйста )

строю линия получаю указанное в неё время , закрываю терминал открываю пробую получить значение времени этой линии а оно ноль((( как его получить не строя линию заново?  ps разве оно не должно сохранятся?

string level_pos_buy = "level_pos_buy";
   
   if (ObjectCreate(0,level_pos_buy,OBJ_HLINE,0,Time[1],Close[1])) // создание горизонтального уровня
   {
      ObjectSet(level_pos_buy,OBJPROP_COLOR,DarkGreen);                 
      ObjectSetInteger(0,level_pos_buy,OBJPROP_STYLE,3);                
   }
         
   datetime enter_time  = (datetime)ObjectGetInteger(0,level_pos_buy,OBJPROP_TIME); // позиция время                     
   
   Print("       ", enter_time);