Изменение параметра кнопками

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Artemij
424
Artemij  

ДД, Уважаемые Гуру.

Хочу в индикаторе один параметр (dDM) сначала задать определённым, а потом менять на единицу кнопками вверх/вниз. Написал следующее:


#define KEY_UP             38
#define KEY_DOWN           40

extern int dDM = 14; 
.................................
void OnChartEvent(const int id, const long& lparam,const double& dparam,const string& sparam)
 {
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(int(lparam))
        {
         case KEY_UP:   dDM=dDM+1;Print(dDM); break;
         case KEY_DOWN: dDM=dDM-1;Print(dDM); break;
        }
     }
  }

int start()
  {
............................

(в конце кода - коммент)
       if(Ma3[0] - Ma4[0]>=De*Point) 
         Comment (" Ind ( " + dDM + " )","\n BUY","\n SPREAD=",spread);

В результате Print () выдаёт чёткое изменение dDM на единицу вверх/вниз, а в комменте (а значит и во всём коде) dDM не меняется. 

Чую, что dDM при проходе кода опять сваливается на изначальный (14), значит его надо определить где-то или как-то ещё. Но с другой стороны, лог помнит изменение (т.е. пишет 14, 15, 16........ 15,14,13,12.....), а до коммента "не доходит.

Что не так?

Alexey Valeev
5577
Alexey Valeev  
Artemij:
Нельзя изменять задаваемые параметры, создайте глобальную переменную, при инициализации в OnInit присваивайте ей заданный параметр, и уже её изменяйте в коде.
TheXpert
18310
TheXpert  
Artemij:

Что не так?

вы настройку меняете. заведите для этого отдельную переменную.

Artemij
424
Artemij  

Получилось следующее:


 int dDM; 
.......................
int init()
  {
.........................
dDM=14; 
  }
.................................
void OnChartEvent(const int id, const long& lparam,const double& dparam,const string& sparam)
 {
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(int(lparam))
        {
         case KEY_UP:   dDM=dDM+1;Print(dDM); break;
         case KEY_DOWN: dDM=dDM-1;Print(dDM); break;
        }
     }
  }

int start()
  {
............................

(в конце кода - коммент)
       if(Ma3[0] - Ma4[0]>=De*Point) 
         Comment (" Ind ( " + dDM + " )","\n BUY","\n SPREAD=",spread);

И опять не работает. Или я что-то не так понял?

Alexey Valeev
5577
Alexey Valeev  
Artemij:

И опять не работает. Или я что-то не так понял?

По данному куску всё правильно, возможно где то что-то ещё изменяет данную переменную. Выложите полностью.

Artemij
424
Artemij  
Комбинатор:

вы настройку меняете. заведите для этого отдельную переменную.

хрен

TheXpert
18310
TheXpert  
Artemij:

хрен

у вас больше нет переменных с таким именем в коде?

нужно больше кода. по тому что есть идей больше нет

Artemij
424
Artemij  

Ещё более драматизировал ситуацию:


 int dDM, dDM1;  
.......................
int init()
  {
.........................
dDM=14; 
  }
.................................
void OnChartEvent(const int id, const long& lparam,const double& dparam,const string& sparam)
 {
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(int(lparam))
        {
         case KEY_UP:   dDM1 = dDM1+1; Print(dDM1,",",dDM); break;
         case KEY_DOWN: dDM1 = dDM1-1; Print(dDM1,",",dDM); break;
        }
     }
  }
   dDM=dDM1;

int start()
  {
............................

(в конце кода - коммент)
       if(Ma3[0] - Ma4[0]>=De*Point) 
         Comment (" Ind ( " + dDM + " )","\n BUY","\n SPREAD=",spread);

Хрен! Пишет 0,14....  1,14.....  2,14.....  3,14 (пи, твою мать!)
то есть, dDM1 за пределы свича просто не выходит. И почему тогда в комменте, несмотря на dDM=dDM1; ничего не меняется ( написано Ind (14) ) ? 

Почему????

Artemij
424
Artemij  
Комбинатор:

у вас больше нет переменных с таким именем в коде?


Может, я и идиот, но не до такой степени.

Artemij
424
Artemij  
Слушайте, а может просто воскресенье, котировки не идут и star() не стартует?........
Artemij
424
Artemij  

вот так.... Дубль 318й

void OnChartEvent(const int id, const long& lparam,const double& dparam,const string& sparam)
 {
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(int(lparam))
        {
         case KEY_UP:   dDM1=dDM1+1;Print(dDM1,",",dDM); break;
         case KEY_DOWN: dDM1=dDM1-1;Print(dDM1,",",dDM); break;
        }
     }
   dDM=dDM1;
  }

int start()
  {

не помогает. Более того. В комменте висит теперь постоянный НУЛЬ ( Ind(0) )

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий