[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 620

 
lottamer:

подскажите плиз ...как выйти из серии if если условие if=true ?

 if

   if

       if (TRUE) - но нужно начать все заного, и не переходить далее по леснтице

          if

              if

                  ....... 


 if

   if

       if (TRUE) - но нужно начать все заного, и не переходить далее по леснтице

      else { 

          if

              if

                  ....... 

      }// if (TRUE) - но нужно начать все заново, и не переходить далее по лестнице

 

Вообще-то, примерно в 99,9% случаев это обозначает, что Вы недостаточно продумали реализацию алгоритма. 

 
VladislavVG:

 if

   if

       if (TRUE) - но нужно начать все заного, и не переходить далее по леснтице

      else { 

          if

              if

                  ....... 

      }// if (TRUE) - но нужно начать все заново, и не переходить далее по лестнице

 

Вообще-то, примерно в 99,9% случаев это обозначает, что Вы недостаточно продумали реализацию алгоритма. 


:)) уже кажется нашел выход

return (0) - и чудесно выходит их всех if 

 
VladislavVG:

 if

   if

       if (TRUE) - но нужно начать все заного, и не переходить далее по леснтице

      else { 

          if

              if

                  ....... 

      }// if (TRUE) - но нужно начать все заново, и не переходить далее по лестнице

 

Вообще-то, примерно в 99,9% случаев это обозначает, что Вы недостаточно продумали реализацию алгоритма. 

С помощью },  else, return, или break либо continue  (для циклов).
 
rigonich:

 Размер тейкпрофита в валюте депозита возвращает функция OrderProfit(), в пунктах -- цена закрытия минус цена открытия, а как найти последнюю закрытую позициюили где взять готовую функцию для этого объясняли несколько раз, по моему, именно вам. 


точно. Надо сначала взять тикет последней закрытой позиции GetTicketLastPos , а потом по этому тикету вынуть что нужно стандартными функциями.

 

спасибо. 

 
xant:

rigonich

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

Теперь по порядку.

В инит я добавляю вызов первой функции, делаю это сразу после запуска функции инит, то есть прямо вот так будет корректно, так?

аналогично я добавляю в блок старт вызов второй функции. Если я сделаю это сразу после расчета переменных, это будет корректно? Например так:

 Вот эти первые 2 шага правильные?

 

Ну и вообще-то я ему сказал за это спасибо сразу же. 

 

 

 

 


Почти. В инит уберите первую { , которая у вас стояла до вставки вызова,в старт -- обе{}, стоящие до и после вызова.Теперь осталос только скопировать код функций, поместить после кода всего вашего советника и скомпилировать советник.

Извиняюсь, ошибся, сложно, когда нет кода пнред глазами.Вот так.

int init()
{
fGet_MineGV();
//... и далее мой код, который был ранее (без первой { )
 

rigonich

скобки убрал,  чтобы осталось четное число скобок. То есть обе функции вставляются без фигурных скобок. 

Получилось так:

 

int init()
{
    fGet_MineGV();
//... и далее мой код
//...разрыв кода...
if ((SUA==100)&&(zigNN>4.5))
{
BUA=0;
BUA1=0;
}

fSave_MineGV();
//... продолжение моего кода...

Затем после всего кода советника вставил 

}
}
}


Comment(fd+f+d);

}
//... тут мой советник закончился


        void fGet_MineGV (string fs_PrefName = "") // префикс имени переменной
     {
        string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
        if (GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
        if (GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
        if (GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
        if (GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
     }
               
      void fSave_MineGV (string fs_PrefName = "") // префикс имени переменной
{
 static datetime ldt_NewBar;
 datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
 //---- Сохраняемся в начале каждой минуты
 if (ldt_NewBar == ldaTBeginBar) return;
 ldt_NewBar = ldaTBeginBar;
 //---- Сохраняем поочереди значения каждой переменной
 string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
 GlobalVariableSet (ls_Name, SUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
 GlobalVariableSet (ls_Name, SUA1);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
 GlobalVariableSet (ls_Name, BUA);
 ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
  GlobalVariableSet (ls_Name, BUA1);
}

После кода я понимаю так - после последней фигурной скобки, фактически отдельно от советинка. Так?

Если правильно, то вот что выдает после компиляции:

 

'fGet_MineGV' - function already defined and has a body         K:\TEST\experts\01___AUDUSD.mq4 (1679, 14)
'ls_Name' - variable already defined                            K:\TEST\experts\01___AUDUSD.mq4 (1681, 16)
2 error(s), 0 warning(s)        

 

Извиняюсь, ошибся, сложно, когда нет кода пнред глазами.Вот так.
Был бы код короткий, я бы выложил его здесь, и все мои проблемы быстро бы разрешились. НО в советнике 1700 строк, плюс к нему еще 3 индикатора внешних, в которых проводится большая часть расчета... Так что только по почте, но это очевидно уже не за бесплатно делается.  
 
xant:

rigonich

скобки убрал,  чтобы осталось четное число скобок. То есть обе функции вставляются без фигурных скобок. 

Получилось так:

 

Затем после всего кода советника вставил 

После кода я понимаю так - после последней фигурной скобки, фактически отдельно от советинка. Так?

Если правильно, то вот что выдает после компиляции:

 

 

 


В этих предупреждениях говорится, что функция и переменная в вашем советнике уже определены ранее. посмотрите, не забыли ли вы удалить код, который вставляли раньше? если нет -- пришлите мне код сова и я вам вставлю в него функции.
 
lottamer:


точно. Надо сначала взять тикет последней закрытой позиции GetTicketLastPos , а потом по этому тикету вынуть что нужно стандартными функциями.

 

спасибо. 


блин...нету такой функции тикет последней закрытой позиции

 

есть тикет последней открытой позиции GetTicketLastPos ...

 
xant:

rigonich

скобки убрал,  чтобы осталось четное число скобок. То есть обе функции вставляются без фигурных скобок. 

Получилось так:

 

Затем после всего кода советника вставил 

После кода я понимаю так - после последней фигурной скобки, фактически отдельно от советинка. Так?

Если правильно, то вот что выдает после компиляции:

 

 

Был бы код короткий, я бы выложил его здесь, и все мои проблемы быстро бы разрешились. НО в советнике 1700 строк, плюс к нему еще 3 индикатора внешних, в которых проводится большая часть расчета... Так что только по почте, но это очевидно уже не за бесплатно делается.  

 

Вот так я думаю будет понятней:

//+------------------------------------------------------------------+
//|                                                       Priner.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


double Var1, Var2, Var3, Var4;// 4-ре переменных для сохранения (у Вас они свои !!!)
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   fGet_MineGV();
//----
//Здесь ваш код
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   //Здесь ваш код
//----
   fSave_MineGV();
   return(0);
  }
//+------------------------------------------------------------------+
void fSave_MineGV (string fs_PrefName = "")     // префикс имени переменной
  {
    static datetime ldt_NewBar;
    datetime ldaTBeginBar = iTime (Symbol(), 1, 0);
//----
    //---- Сохраняемся в начале каждой минуты
    if (ldt_NewBar == ldaTBeginBar) return;
    ldt_NewBar = ldaTBeginBar;
    //---- Сохраняем поочереди значения каждой переменной
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
    GlobalVariableSet (ls_Name, Var1);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    GlobalVariableSet (ls_Name, Var2);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    GlobalVariableSet (ls_Name, Var3);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    GlobalVariableSet (ls_Name, Var4);
//----
  }
void fGet_MineGV (string fs_PrefName = "")     // префикс имени переменной
  {
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
//----
    //---- Восстанавливаем значения переменных
    if (GlobalVariableCheck (ls_Name)) Var1 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    if (GlobalVariableCheck (ls_Name)) Var2 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    if (GlobalVariableCheck (ls_Name)) Var3 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    if (GlobalVariableCheck (ls_Name)) Var4 = GlobalVariableGet (ls_Name);
  }  
//----
 
lottamer:


блин...нету такой функции тикет последней закрытой позиции, 

 

есть тикет последней открытой позиции GetTicketLastPos ...


тикет последеей закрытой  -в истории.