Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 234

 
Vitaly Muzichenko:

Хорошим "тоном" программирование является программа без ошибок и предупреждений, всё остальное - дилетанство.


Оставим вкусовщину. Предположу что подобные предупреждения сделаны не просто так. Вопрос - для чего?

 
Artyom Trishkin:
Вы ж заработанные советником деньги не из журнала выводить собираетесь. Соответственно, программа должна обрабатывать ошибки чтобы действовать соответственно.

Так программа их и так обрабатывает, если есть, и выводит сообщения о них. Что я тут не понял?

 
Andrey Sokolov:

Так программа их и так обрабатывает, если есть, и выводит сообщения о них. Что я тут не понял?

Не программа, а терминал.
Чтобы программа их обрабатывала, их сначала нужно получить. Для этого торговые функции возвращают false при ошибке. Далее, если результат работы функции false, то нужно получить код ошибки GetLastError() и его и обрабатывать в своей программе.
 

приветствую! в терминале не проходит авторизацию! куда копать,что делать?

 
kalmyk87приветствую! в терминале не проходит авторизацию! куда копать,что делать?
Авторизация = связь с сервером брокера, нужно включить интернет. Если демо - забыли пароль, открываете новый счет. Если реал - звоните брокеру.
 
STARIJ:
Авторизация = связь с сервером брокера, нужно включить интернет. Если демо - забыли пароль, открываете новый счет. Если реал - звоните брокеру.

по счету я авторизовался...а вот профиль mql5 не проходит авторизацию почему то..

 

Добрый день. Помогите пожалуйста вот с таким вопросом...

Индикатор рисует белый уровень на текущий день из CSV. Если цена не доходит до этого уровня, то он (уровень) продолжает отображаться в последующие дни пунктиром. Когда в будущем цена доходит до этого белого пунктира он останавливается. Но на следующий день после проверки неотработанных уровней он(индикатор) считает этот уровень исполненным и перестает его отрисовывать, а хотелось бы чтобы этот пунктир оставался на графике.

Спасибо. 

//------------- читаю и разбираю строку из файла --

txt_data = FileReadString(file);   дата_уровней = StrToTime(txt_data+" 00:00");
if(FileIsEnding(file)==true)     break; // если конец  Выход из цикла
ArrayInitialize(d_input, 0);
for (int i=0; i<12; i++)  //== считываю уровни в массив
 {
 txt_data = FileReadString(file); 
 d_input[i] = replace_dot(txt_data);
 if ( FileIsLineEnding(file) ) break;
 }

if(уровни == Daily)
  {
   double white = d_input[4];
   t0 = дата_уровней + 1*PeriodSeconds(PERIOD_H1);
   t1 = дата_уровней + 23*PeriodSeconds(PERIOD_H1);
     Draw_Level("white", white, c_day_3, STYLE_SOLID, толщина); 
      if(показ_неотработок)
    if( !check_white_level(дата_уровней, white) )
     draw_line(t0, white, c_day_3) ;
  }
//   отображение  уровней 
void Draw_Level(string name, double _level, color _colr, int _style, int _width)
{
string o_name = i_name +"_"+ name +"_"+ TimeToStr(t0,TIME_DATE);
if (_level>0)
 {
  if (ObjectFind(o_name) != 0)
   ObjectCreate(o_name, OBJ_TREND, 0, t0, _level, t1, _level);
  ObjectSet(o_name, OBJPROP_TIME1, t0);
  ObjectSet(o_name, OBJPROP_PRICE1, _level);
  ObjectSet(o_name, OBJPROP_TIME2, t1);
  ObjectSet(o_name, OBJPROP_PRICE2, _level);
  ObjectSet(o_name, OBJPROP_COLOR, _colr);
  ObjectSet(o_name, OBJPROP_STYLE, _style);
  if(_style == STYLE_DOT)   ObjectSet(o_name, OBJPROP_WIDTH, 1);
    else     ObjectSet(o_name, OBJPROP_WIDTH, _width);
  ObjectSet(o_name, OBJPROP_RAY, false);  // луч
  ObjectSetText(o_name, DoubleToStr(_level, 4) );
  ObjectSetInteger(0, o_name, OBJPROP_SELECTABLE, False); 
   ObjectSetInteger(0, o_name, OBJPROP_HIDDEN, True);  
   ObjectSetString(0, o_name, OBJPROP_TOOLTIP, "\n"); // убираю всплывающую надпись
 }
}
// проверка_отработки уровня
bool check_white_level(datetime t_open, double _level)
{
if (_level <= 0) return(False);
int bar0 = iBarShift(NULL, 0, t_open);
double max = High[iHighest(NULL, 0, MODE_HIGH, bar0, 0)];
double min = Low[iLowest(NULL, 0, MODE_LOW, bar0, 0)];
if( _level <= max && _level >= min )
  return(TRUE);
return(False);
}
void draw_line(datetime begin, double _level, color _clr)
{
if (_level <= 0) return;
string o_name = i_name +"_wh1_"+ TimeToStr(begin,TIME_DATE);
datetime t_0 = begin ;
datetime t_1 = TimeCurrent() ;
  if (ObjectFind(o_name) != 0)
   ObjectCreate(o_name, OBJ_TREND, 0, t_0, _level, t_1, _level);
  ObjectSet(o_name, OBJPROP_TIME1, t_0);
  ObjectSet(o_name, OBJPROP_PRICE1, _level);
  ObjectSet(o_name, OBJPROP_TIME2, t_1);
  ObjectSet(o_name, OBJPROP_PRICE2, _level);
  ObjectSet(o_name, OBJPROP_COLOR, _clr);
  ObjectSet(o_name, OBJPROP_STYLE, STYLE_DOT);
   ObjectSet(o_name, OBJPROP_WIDTH, 1);
    ObjectSet(o_name, OBJPROP_RAY, false);  // луч
    ObjectSetInteger(0, o_name, OBJPROP_SELECTABLE, False); 
  ObjectSetInteger(0, o_name, OBJPROP_HIDDEN, True);  
  ObjectSetString(0, o_name, OBJPROP_TOOLTIP, "\n"); // убираю всплывающую надпись
}
 
ПОМОГИТЕ ПОНЯТЬ ЧТО ТАКОЕ ЗАЛОГ
1) Как рассчитать залог? Как получить это значение в советнике?
2) Как рассчитать залог при локировании? Как получить это значение в советнике?
3) Как получить по тикету открытого ордера его размер залога? Не смог найти функции вроде OrderMargin(), хотя в терминале залог по ордерам виден (или он врёт?).
4) Залог это параметр зафиксированный единожды на момент открытия ордера или пересчитываемый (плавающий) в каждый новый момент существования открытого ордера по актуальному курсу?

Правильная ли формула ручного расчета залога?
(базовый_лот * лот_сделки * текущий_курс_%%%USD) / плечо = залог USD
 
smart_man:
ПОМОГИТЕ ПОНЯТЬ ЧТО ТАКОЕ ЗАЛОГ
1) Как рассчитать залог? Как получить это значение в советнике?
2) Как рассчитать залог при локировании? Как получить это значение в советнике?
3) Как получить по тикету открытого ордера его размер залога? Не смог найти функции вроде OrderMargin(), хотя в терминале залог по ордерам виден (или он врёт?).
4) Залог это параметр зафиксированный единожды на момент открытия ордера или пересчитываемый (плавающий) в каждый новый момент существования открытого ордера по актуальному курсу?

Правильная ли формула ручного расчета залога?
(базовый_лот * лот_сделки * текущий_курс_%%%USD) / плечо = залог USD

1)

 margin =AccountInfoDouble(ACCOUNT_MARGIN);                        //-Размер зарезервированных залоговых средств на счете  в валюте депозита

2)не пользуюсь

3)формула та что у вас , только вместо "текущий_курс_%%%USD", цена открытия поз.

4)параметр зафиксированный


Правильная

 
Alekseu Fedotov:

1)

2)не пользуюсь

3)формула та что у вас , только вместо "текущий_курс_%%%USD", цена открытия поз.

4)параметр зафиксированный


Правильная

Спасибо!

2) нашел информацию, что формула такая же, только в конце еще делить всё на 2, но не знаю так ли на самом деле

3) цена открытия позиции, которая по OrderOpenPrice() ?

5) Еще вопрос, если планируется любое открытие, то перед этим надо обязательно рассчитать все будущие затраты на ордер (размер залога, размер прибыли и убытка, а тут потребуется еще расчет стоимости пункта, проверка наличия свободных средств, ограничение в процентах от свободных средств для риска за раз, я что-то еще упустил?) и только потом открывать? Или можно как-то по-другому? Еще просадка есть, ее тоже считать?

5.1) Как рассчитать стоимость пункта?

5.2) Как проверить наличие свободных средств?

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

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