[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 789

 
Hedin:

Уважаемые программисты,
подскажите пожалуйста почему не выполняются операторы когда условие истино, точнее выполняются но в беспорядочном режиме (например, через раз). В логах ошибок нет.


Поправьте свой код:

if ( MathAbs( ord_sl - (ord_open+First_sell_limit_SL*Point) ) < Point / 2.0 && ...

И никогда не сравнивайте переменные типа double на равенство.

 
PapaYozh:


Поправьте свой код:

И никогда не сравнивайте переменные типа double на равенство.


А почему нельзя сравнивать переменные типа double на равенство?
 
Hedin:

А почему нельзя сравнивать переменные типа double на равенство?
А поиск уже не работает?
 
Hedin:

А почему нельзя сравнивать переменные типа double на равенство?
Посмотрите тут.
 
Necron:
в деините записывайте в глобальную переменную, а ините читайте значение этой переменной, в чем проблема?

Я так понимаю, Глобальная переменная - переменная, объявленная за пределами всех функций. Инициализация глобальных переменных производится однократно перед началом исполнения специальных функций.

То есть, в начале программы до функции start объявляются глобальные переменные, в том числе и та, которую я хочу передать в программу при следующем старте. Потом, по Вашему предложению, в deinit я фиксирую значение этой переменной. НО! Я так понимаю, что при старте программы ещё до выполнения функции init все глобальные переменные, описанные в начале программы, в том числе и интересующая меня, будут заново проинициализированы. И когда очередь дойдет до функции init моя переменная, запоненая ранее будет утеряна! Или я не прав?

 
Нет, он имел ввиду глобальную переменную GlobalVariable, которая хранится в файле.
 
ikatsko:

Я так понимаю, Глобальная переменная - переменная, объявленная за пределами всех функций. Инициализация глобальных переменных производится однократно перед началом исполнения специальных функций.

То есть, в начале программы до функции start объявляются глобальные переменные, в том числе и та, которую я хочу передать в программу при следующем старте. Потом, по Вашему предложению, в deinit я фиксирую значение этой переменной. НО! Я так понимаю, что при старте программы ещё до выполнения функции init все глобальные переменные, описанные в начале программы, в том числе и интересующая меня, будут заново проинициализированы. И когда очередь дойдет до функции init моя переменная, запоненая ранее будет утеряна! Или я не прав?

Есть два вида глобальных переменных: глобальные переменные вашей программы, о которых вы пишете, и глобальные переменные вашего терминала,
которые хранятся отдельно от вашей программы в течении двух недель если к ним не обращаться, если память мне не изменяет...
они служат, например, для передачи данных между разными экспертами, работающими одновременно на одном терминале и т.д ...
Вам нужны именно глобальные переменные терминала.
 
Roger:
Нет, он имел ввиду глобальную переменную GlobalVariable, которая хранится в файле.
Да, я имел ввиду глобальные переменные терминала. В личку был уже этот вопрос, ответил.
 
Necron:
Да, я имел ввиду глобальные переменные терминала. В личку был уже этот вопрос, ответил.
Уже ВСЁ понял. Бывает... ну не дочитал... извините :)
 
вот, собственно код моментума стандартного из МТ4 - ии??? я не вижу тут 
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
//+------------------------------------------------------------------+
//|                                                     Momentum.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
extern int MomPeriod=14;
 
//---- buffers
double MomBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MomBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="Mom("+MomPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   SetIndexDrawBegin(0,MomPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Momentum                                                         |
//+------------------------------------------------------------------+
int start()
  {
   int i,counted_bars=IndicatorCounted();
   
//----
   if(Bars<=MomPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=MomPeriod;i++) MomBuffer[Bars-i]=0.0;
      
//----
   
   i=Bars-MomPeriod-1;
   if(counted_bars>=MomPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      MomBuffer[i]=Close[i]*100/Close[i+MomPeriod];
      i--;
     }
   return(0);
  }
//+------------------------------------------------------------------+
Roger:

Странно Вы как-то искали

double iMA(

string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

Первый элемент.

Причина обращения: