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

 
Dimka-novitsek:
Это стратегия такая. Я щас может заскриню ее. Ох, брат старший пришол, не успеть могу. А ситуация таки странная.

Когда уже Диман, ты осилишь ЛИЧНЫЙ камп?  :-)

Неужели за год на реале ещё бабла не нарубил? Там же вроде и СТАРТОВЫЕ суммы тебе не хилые выделены?  :-)

 
TarasBY:
Для начала определитесь с терминологией - "лимитник который сработает ровно в определённой время" - что означает "лимитник сработает"??? И чем подробнее расскажете про этот волшебный процесс - тем легче будет его осуществить в реальной жизни.


 Да, не верно я выразился. В общем-то. Если тут понятно, отложенник только по цене ставиться.

 

  Вот код:

//+------------------------------------------------------------------+
//|                                                       2 Days.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string    A1 = "Объем сделки. Если i_lots = 0, то считается в процентах";
extern double    i_lots = 0.1;
extern string    A2 = "Управление рисками";
extern double    i_sl = 15,
                 i_tp = 10;
extern int  slippage,
            price_b,
            price_a;

extern string    Z1 = "=== Прочие настройки ===";
extern string    i_openOrderSound = "ok.wav";
extern int       i_magicNumber = 400021;

double firstBarClosed,
       secondBarClosed;
 
// Идентификаторы типов сигналов
#define SIGNAL_BUY              1                     // Сигнал на покупку
#define SIGNAL_SELL            -1                     // Сигнал на продажу
#define SIGNAL_NO               0                     // Нет сигнала

#include <stderror.mqh>

int init()
{
   
   return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------+
//| Получение рыночных данных                                                           |
//+-------------------------------------------------------------------------------------+
//FindOrders()
//+-------------------------------------------------------------------------------------+
//| Получение рыночных данных                                                           |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
  price_b = MarketInfo(Symbol(),MODE_BID);
  price_a = MarketInfo(Symbol(),MODE_ASK);
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int signal, double& priceForBuy, double& priceForSell)
{
 // FindOrders();
  priceForBuy = NormalizeDouble(priceForBuy,Digits);
  priceForSell = NormalizeDouble(priceForSell,Digits);
  
  if(!IsTesting())
     GetMarketInfo();
     
  if (signal == SIGNAL_BUY)
     if (!OrderSend(Symbol(),OP_BUYLIMIT, i_lots,priceForBuy,slippage,i_sl,i_tp,"",i_magicNumber,3))
     return(false);
     
  if (signal == SIGNAL_SELL)
     if (!OrderSend(Symbol(),OP_SELLLIMIT,i_lots,priceForSell,slippage,i_sl,i_tp,"",i_magicNumber,3))
     return(false);
     
  return(true);
}
//+-------------------------------------------------------------------------------------+
//| Получение цены входа в покупку или в продажу                                        |
//+-------------------------------------------------------------------------------------+
double GetPriceToInput()
{
  firstBarClosed = iClose(Symbol(),1440,2);
  secondBarClosed = iClose(Symbol(),1440,1);
    
  {
    double deltaForSell = (firstBarClosed - secondBarClosed)/2;
    double priceForSell = secondBarClosed - deltaForSell;
    
    return(priceForSell);
  }  

  {
    double deltaForBuy = (secondBarClosed - firstBarClosed)/2;
    double priceForBuy = secondBarClosed + deltaForBuy;  
    return(priceForBuy);
  }
}
//+-------------------------------------------------------------------------------------+
//| Генерация сигнала закрытия, покупки или продажи                                     |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
  if(firstBarClosed > secondBarClosed)
  return(SIGNAL_BUY);

  if(firstBarClosed < secondBarClosed)
  return(SIGNAL_NO);
}
//+-------------------------------------------------------------------------------------+
//| Функция Start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
  int signal = GetSignal();
    
    if (signal != SIGNAL_NO)
      if(!Trade(signal, priceForBuy, priceForSell))
      return(0);

  return(0);
}


 Вопрос по сути не сложный. Я передал в функцию Trade(int signal, double& priceForBuy, double& priceForSell) формальные параметры priceForBuy и priceForSell. Параметры передал по ссылкам. Ведь так это делается? Ведь функции то не глобальные, а локальные.

 Пр компиляции возникла ошибка:

'priceForBuy' - variable not defined    E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (117, 25)
'priceForSell' - variable not defined   E:\Insall'd soft's\Forex\Admiral Markets\experts\2 Days.mq4 (117, 38)

  Откуда ошибка? Ведь данные параметры я уже определил в функции GetPriceToInput()

 
а кренделек & после double для чего (я честно не знаю)?
 
YOUNGA:
а кренделек & после double для чего (я честно не знаю)?

Это помешательство на желании передавать параметры по ссылке. :-)

 
Roman.:

Это помешательство на желании передавать параметры по ссылке. :-)



 А как иначе? Тоже самое по 100 раз рассчитывать?
 
hoz:


 Да, не верно я выразился. В общем-то. Если тут понятно, отложенник только по цене ставиться.

 

  Вот код:

 Вопрос по сути не сложный. Я передал в функцию Trade(int signal, double& priceForBuy, double& priceForSell) формальные параметры priceForBuy и priceForSell. Параметры передал по ссылкам. Ведь так это делается? Ведь функции то не глобальные, а локальные.

 Пр компиляции возникла ошибка:

  Откуда ошибка? Ведь данные параметры я уже определил в функции GetPriceToInput()

Перменные priceForBuy и priceForSell не найдены - говорит компилятор. Вам нужно разобраться с передачей значений переменных по ссылкам.
 
hoz:

 А как иначе? Тоже самое по 100 раз рассчитывать?

Оформляйте сигнальную часть эксперта, как в учебнике и будет Вам щастье!

Мной все ссыли Вам были даны в ветке ранее...


 
hoz:

 А как иначе? Тоже самое по 100 раз рассчитывать?
Мысль ПРАВИЛЬНАЯ, реализация ХРОМАЕТ! :)))
 

 Ну тут примеров нет канкретных:

https://docs.mql4.com/ru/basis/variables/formal

 Написано вверху где параметры функции как у меня, т.е. & после типа данных

 
hoz:

 Ну тут примеров нет канкретных:

https://docs.mql4.com/ru/basis/variables/formal

 Написано вверху где параметры функции как у меня, т.е. & после типа данных. 

Может так будет компилироваться: 

//+-------------------------------------------------------------------------------------+
//| Получение цены входа в покупку или в продажу                                        |
//+-------------------------------------------------------------------------------------+
bool GetPriceToInput (int signal)
{
  firstBarClosed = iClose(Symbol(),1440,2);
  secondBarClosed = iClose(Symbol(),1440,1);

    double deltaForSell = (firstBarClosed - secondBarClosed)/2;
    double priceForSell = secondBarClosed - deltaForSell;


    double deltaForBuy = (secondBarClosed - firstBarClosed)/2;
    double priceForBuy = secondBarClosed + deltaForBuy;  
    return (Trade (signal, priceForBuy, priceForSell));
}
//+-------------------------------------------------------------------------------------+
//| Функция Start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
  int signal = GetSignal();
    
    if (signal != SIGNAL_NO)
      if(!GetPriceToInput (signal))
      return(0);

  return(0);
}

 хотя структура код какая-то "левая"...

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