Помогите плиз запомнить значение ACCOUNT_EQUITY в определённое время

 

Помогите плиз запомнить значение ACCOUNT_EQUITY

Т.е сова запоминает значение ACCOUNT_EQUITY  к примеру в час ночи

и если к обеду  текущее ACCOUNT_EQUITY изменилось на энное значение то сова прекращает торговлю

 
sdf373:

Помогите плиз запомнить значение ACCOUNT_EQUITY

Т.е сова запоминает значение ACCOUNT_EQUITY  к примеру в час ночи

и если к обеду  текущее ACCOUNT_EQUITY изменилось на энное значение то сова прекращает торговлю

Проще всего на мой взгляд использовать глобальную переменную для хранения значения.

Сюда легко запомнить, и так-же просто вытащить и сравнить.

GlobalVariableSet

Устанавливает новое значение глобальной переменной

 

GlobalVariableGet

Запрашивает значение глобальной переменной

 

 потом делаете проверку на изменение, и если нужно - перезаписываете.

 

Можно и просту переменную использовать.

 

bool chaked;

double eqiu; 
bool stop_trade;

... 

if(Hour()==12 && equi!=AccountEquity()) 
{
stop_trade=true;
chaked=false; 
}

if(Hour()==1 && !chaked)

{

equi=AccountEquity(); 

chaked=true;

} 
 

Благодарю за информацию 

Буду изучать и разбираться 

 
eevviill:

Можно и просту переменную использовать.

 

 

Такая переменная при изменении тайм-фрейма или при перезапуске терминала очищается, а это не есть хорошо.

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

Вот набросал решение которое будет работать при любых условиях

//+------------------------------------------------------------------+
//|                                                         файл.mq4 |
//+------------------------------------------------------------------+
#property strict

extern string starthour      = "01:00";     // начало работы
extern int    ProfitNoTrade  = 10;          // профит в единицах депозита, при превышении которого сегодня не работаем


string trade_mode;
double ReadAccFreeMarg=0,WriteAccFreeMarg=0;
bool Write=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
 {
// Определяем на каком счете запущен эксперт
 ENUM_ACCOUNT_TRADE_MODE account_type=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE);
   switch(account_type)
     {
      case  ACCOUNT_TRADE_MODE_DEMO:
         trade_mode="demo";
         break;
      case  ACCOUNT_TRADE_MODE_CONTEST:
         trade_mode="comp";
         break;
      default:
         trade_mode="real";
         break;
     }
// Если нет глобальной переменной - создаем
  if (!GlobalVariableCheck(StringConcatenate(Symbol(),"_OFM_test")))
   {
    GlobalVariableSet(StringConcatenate(Symbol(),"_OFM_test"), AccountFreeMargin());
   }
// Если нет глобальной переменной - создаем
  if (!GlobalVariableCheck(StringConcatenate(Symbol(),"_OFM_",trade_mode)))
   {
    GlobalVariableSet(StringConcatenate(Symbol(),"_OFM_",trade_mode), AccountFreeMargin());
   }

//-
   return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
 {
//---
 WriteAccFreeMarg=AccountFreeMargin(); // Записываем в переменную
 
 ReadAccFreeMarg=IsTesting()?GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_test")):GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_",trade_mode)); // читаем что там есть сейчас
 
 if(CurTime() > StringToTime(starthour) && CurTime() < StringToTime(starthour+(string)15) && WriteAccFreeMarg != ReadAccFreeMarg) // проверяем время и баланс на изменение перед записью
  {
  // Записываем в определенное время значение баланса
   Write=IsTesting()?GlobalVariableSet(StringConcatenate(Symbol(),"_OFM_test"),WriteAccFreeMarg):GlobalVariableSet(StringConcatenate(Symbol(),"_OFM_",trade_mode),WriteAccFreeMarg);
  }
 
 ReadAccFreeMarg=(IsTesting())?GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_test")):GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_",trade_mode)); // Обновляем переменную баланса, вдруг изменилась
 
 if(WriteAccFreeMarg < ReadAccFreeMarg + ProfitNoTrade) // Тут проверям теперешний баланс
  {
  
   // сюда код
  
  }

 }
 

Ого

С глобальными  я ещё не силён, но разберусь, и  будет Ок

Благодарю Вас MVS 

 
MVS:

Такая переменная при изменении тайм-фрейма или при перезапуске терминала очищается, а это не есть хорошо.

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

Вот набросал решение которое будет работать при любых условиях

 

Дык. А зачем так много кода?

То что я написал можно глобальной заменить и всё. 

 
MVS:

Такая переменная при изменении тайм-фрейма или при перезапуске терминала очищается, а это не есть хорошо.

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

Вот набросал решение которое будет работать при любых условиях

 

А без #property strict никак нельзя? А то весь советник написан без структур, и незачем перелопачивать весь из-за одной глобальной! :((

И чем отличаются эти два выражения:

  ReadAccFreeMarg = IsTesting()?GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_test")):
  GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_",trade_mode));// читаем что там есть сейчас
//----
  ReadAccFreeMarg = (IsTesting())?GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_test")):
  GlobalVariableGet(StringConcatenate(Symbol(),"_OFM_",trade_mode));// Обновляем переменную баланса, вдруг изменилась

Разве только разными комментариями на русском? Или двумя скобками, заключающими IsTesting?

Рад буду Вашему пояснению! Спасибо! 

 

 

 

Борис, это работа с тиками, за которыми код может не успеть,- поэтому нужна дополнительная проверка: не изменилась ли ситуация, пока обрабатывалось событие. 

Ну, а строгость или нестрогость  контроля кода компилятором - личное дело каждого, имхенько. 

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

 
tara:

Борис, это работа с тиками, за которыми код может не успеть,- поэтому нужна дополнительная проверка: не изменилась ли ситуация, пока обрабатывалось событие. 

Ну, а строгость или нестрогость  контроля кода компилятором - личное дело каждого, имхенько. 

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

Алексей, разобрался сам. Отсутствие #property strict нисколько не мешает! Только нужно было сменить логику, поскольку у меня другой алгоритм, по которому эксперт строго контролирует потери, а не прибыль, которую незачем контролировать! И скобки лишние не нужны, как и несколько фигурных тоже!

Без ЗЫ Здравствуй!

Кстати, ты был прав, когда я кому-то посоветовал ограничивать проходы в тестере! Я и сам давно не позволяю тестеру строчить логи по превышению норм! Просто не разрешаю эксперту открывать позиции при недозволенной просадке! И порядок! 

Неприятный сюрприз! Без #property strict работает только в тестере, если отключаюсь от Инета! При подключении к Инету не работает! 

А с #property strict компилятор ругается! Так что моя просьба о варианте без #property strict остаётся в силе!

 
borilunad:
Ты бы ругань эту компиляторскую здесь выложил,- мы мигом к вам заявимся с лопатами и вилами, денечек покумекаем и выявим дефект.