Любые вопросы новичков по 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) Как проверить наличие свободных средств?

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