Память в советнике

 
Здравствуйте.

Есть код:
extern     string  Info2="-Order-";
extern     double  Lot=0.1;
extern    double  LotIncrease=0.0;
extern    double  TakeProfit=0;
extern    double  StopLoss=0;
extern    string  Info4="-Others-";
extern    int     Slippage=2;
extern    int     Magic=777;
extern    string  oComment="111";

int OrderNum1;
int OrderNum2;

int OnInit()
{...}

void OnDeinit(const int reason)
{...}

void OnTick()
{

OrderNum1=OrderSend(Symbol(),tB(),pLot,OpenBuyPrice(),pSlippage,0,0,oComment,pMagic,0,clrBlue);
OrderNum2=OrderSend(Symbol(),tS(),pLot,OpenBuyPrice(),pSlippage,0,0,oComment,pMagic,0,clrBlue);

}
Что будет с данными в параметрах OrderNum1 и OrderNum2 в случае:
1) Если терминал перезагрузится.
2) Если произойдет потеря связи с сервером ДЦ (затем связь восстановится)

Меня интересует как MT4, так и MT5.
 
kira36:
Здравствуйте.

Есть код:
Что будет с данными в параметрах OrderNum1 и OrderNum2 в случае:
1) Если терминал перезагрузится.
2) Если произойдет потеря связи с сервером ДЦ (затем связь восстановится)

Меня интересует как MT4, так и MT5.
Ничего не будет! А что вы хотите чтобы было?
 
Alexey:
Ничего не будет! А что вы хотите чтобы было?
В параметры OrderNum1 и OrderNum2 были сохранены значения тикетов ордеров.
Что произойдет со значениями в этих 2ух случаях?
 
kira36:
В параметры OrderNum1 и OrderNum2 были сохранены значения тикетов ордеров.
Что произойдет со значениями в этих 2ух случаях?
Вроде ответили уже - ничего, а точнее мусор
 

kira36:
В параметры OrderNum1 и OrderNum2 были сохранены значения тикетов ордеров.
Что произойдет со значениями в этих 2ух случаях? 

 в мт4 int OrderSend()  Основная функция, используемая для совершения торговых операций или установки отложенного ордера.

1) Если терминал перезагрузится.

до OrderSend  значения  int OrderNum1; int OrderNum2;  будут не определены  EMPTY_VALUE

2) Если произойдет потеря связи с сервером ДЦ (затем связь восстановится)

 до следующего обращения к OrderSend  значения  int OrderNum1; int OrderNum2; сохранятся от предыдущего обращения или если предыдущего нет, то EMPTY_VALUE 

 

в мт5  Функция  bool OrderSend() предназначена для совершения торговых операций через отправку запросов на торговый сервер. это не тикет, a только ответ отправил или нет , true или false

1) Если терминал перезагрузится. 

до OrderSend  значения  int OrderNum1; int OrderNum2;  будут не определены EMPTY_VALUE

2) Если произойдет потеря связи с сервером ДЦ (затем связь восстановится) 

до следующего обращения к OrderSend  значения  int OrderNum1; int OrderNum2; сохранятся от предыдущего обращения но будут true или false , если предыдущего нет, то EMPTY_VALUE 

 

при перезагрузке терминала происходит переинициализация переменных

при потере связи ,  переинициализации переменных не происходит

пишите в GlobalVariableSet()  Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения

 

думаю так, но лучше проверить , т.е сделайте распринтовку

 
pako, больше вам спасибо за подробный ответ.
 
kira36:
Здравствуйте.

Есть код:
Что будет с данными в параметрах OrderNum1 и OrderNum2 в случае:
1) Если терминал перезагрузится.
2) Если произойдет потеря связи с сервером ДЦ (затем связь восстановится)

Меня интересует как MT4, так и MT5.

 

Скажу только за МТ4. При перезагрузке - переинициализация и, как следствие, обнуление. Причём даже если у тебя советник уже работает на счёте, и ты его правишь и перекомпилируешь, то произойдёт также обнуление. Более того, переинициализация происходит если менять таймфрейм графику, на котором работает советник. Я это проблему в своём роботе решил путём сохранения необходимых переменных в файлы. Если интересуют подробности - спрашивай

При временном обрыве соединения с переменными ничего не происходит, но данные в них могут утратить актуальность, в зависимости от их назначения разумеется. 

 
burz:

 

Скажу только за МТ4. При перезагрузке - переинициализация и, как следствие, обнуление. Причём даже если у тебя советник уже работает на счёте, и ты его правишь и перекомпилируешь, то произойдёт также обнуление. Более того, переинициализация происходит если менять таймфрейм графику, на котором работает советник. Я это проблему в своём роботе решил путём сохранения необходимых переменных в файлы. Если интересуют подробности - спрашивай

При временном обрыве соединения с переменными ничего не происходит, но данные в них могут утратить актуальность, в зависимости от их назначения разумеется. 

Переинициализация вовсе не означает обнуление глобальных переменных. Просто вызывается OnInit(). Глобальные переменные обнуляются только при старте программы. Я в OnInit делаю вот так, чтобы не реагировать на смены ТФ и прочие мелочи.

int OnInit()
{
    if(LastDeinitReason==REASON_CHARTCHANGE || LastDeinitReason==REASON_TEMPLATE)
    {
        LastDeinitReason = 0;
        return(INIT_SUCCEEDED);
    }
      
    OpenLogFiles();
#ifdef USE_MMF
    if(UseMMF)
    {
        if(!OpenMMF())
            Alert("MMF не инициализирован");
    }
#endif
    SetThresholdArrays();
    if(ArraySize(SmartDspArr) == 0)
        CreateStrategies();
    else
        ChangedParams();
    if(!IsRunOnTester())
        //EventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL);
        EventSetTimer(SEC_TIMER_INTERVAL);
    LastDeinitReason = 0;
    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
    LastDeinitReason = reason;
    if(reason==REASON_CHARTCHANGE || reason==REASON_TEMPLATE)
        return;
    EventKillTimer();
    DeleteStrategies();
#ifdef USE_MMF
    if(UseMMF)
        CloseMMF();
#endif
    CloseLogFiles();
}