[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 888

 
Multy:

Панятна.

К стати в MQL4 есть таймер или только в MQL5?

наверно только эти ф-ции:

https://www.mql5.com/ru/search?utm_campaign=MQL4.community

https://www.mql5.com/ru/search?utm_campaign=MQL4.community
 
kwadrad:

Вопрос аксакалам

внезапно тестер перестал работать, чешет нет исторических данных.

Что с ним делать?

для сведения: Архив котировок загружен


мне помогла перезагрузка терминала и предварительное удаление скачанных котировок в папке: C:\Program Files\MetaTrader - Alpari\history\Alpari-Micro2

затем заново скачал архив котировок 

 
Noterday:
Подскажите пожалуйста функцию, которая вычисляет максимально возможный объём открытия ордера?
Давайте я вам дам удочку... :)
В функции, предлагаемой ниже есть все данные для рассчёта нужных вам параметров. Меня такая лень обуяла, что даже по клавишам влом стучать...

Сами найдёте, что нужно и переделаете под себя... Сам код настолько прост и доступен, что никому труда не составит его переделать...

// ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots(double lt, double divider=4.0)        // lt = проверяемый лот, divider = на сколько разделить
{                                                        //                                 свободные средства
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/divider,dig);  // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>=MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)              // Если свободных средств больше, чем цена позиции - 
      {
         return(ltcorr);                                                         // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)        // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);               // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot+mspr*pnt;                      
         Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
               " Стоимость позы до корректировки = ",Money,
               " Стоимость позы после корректировки = ",MoneyCorr
               ); 
         return(ltcorr);                                                         // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}

Один вопрос...

А зачем вам торговля как у Гитлера в конце войны... Тот набрал детишек в ГитлерЮгенд, так сказать, мясо на один выстрел фауст-патрона...

Ничего не напоминает?????

ИМХО, конечно...

 
artmedia70:
Давайте я вам дам удочку... :)
В функции, предлагаемой ниже есть все данные для рассчёта нужных вам параметров. Меня такая лень обуяла, что даже по клавишам влом стучать...

Сами найдёте, что нужно и переделаете под себя... Сам код настолько прост и доступен, что никому труда не составит его переделать...

Один вопрос...

А зачем вам торговля как у Гитлера в конце войны... Тот набрал детишек в ГитлерЮгенд, так сказать, мясо на один выстрел фауст-патрона...

Ничего не напоминает?????

ИМХО, конечно...


Спасибо!

Не максимальным объёмом не собираюсь открываться, просто нужно его посчитать исходя из размера Депо, для дальнейших математических операций =))

 
Noterday:

Спасибо!

Не максимальным объёмом не собираюсь открываться, просто нужно его посчитать исходя из размера Депо, для дальнейших математических операций =))



для BUY:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,lot),2);

для SELL:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELL,lot),2);

lot - переменная в которой обьем ордера 

результат вычисления необходимо  проверить на >0

https://www.mql5.com/ru/search 

 
IgorM:


для BUY:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_BUY,lot),2);

для SELL:

NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck(Symbol(),OP_SELL,lot),2);

lot - переменная в которой обьем ордера

https://www.mql5.com/ru/search

... ну ты, Игорь, торопыжка... :)

Не успел я пальцы к клаве придвинуть, а ты уже отписался... :)

 
Спасибо всем!
 

Привет!

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

но меня интересует больше, как то так :

int start()

  { 

 double LineX = iCustom ("EURUSD", Period_H1, "Indicator",0,0);

 double lineY = iCustom ("EURUSD", Period_H1, "Indicator",1,0);

double priceA = Ask;

double priceB = Bid;

double intersectionX = (LineX == priceA) ;

double intersectionY = (LineY == priceB) ;

// а так же еще определить, какое пересечение последнее, а какое предпоследние 

// intersectionX = последнее пересечение и на оборот
// intersectionY = предпоследние пересечение и на оборот

// то есть я понимаю логику, а  вот связать в коде не могу.
 
//произошло intersectionX,   то intersectionFirst = intersectionX; intersectionSecond = intersectionY;

// произошло intersectionY, то intersectionFirst = intersectionY; intersectionSecond = intersectionX;


 }
 
belck:

Привет!

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

но меня интересует больше, как то так :


любое пересечение оптимально рассматривать как разность цены (Ask/Bid) и линии индикатора, т.е. 

if  (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) > 0) Comment("Цена выше индикатора"); else  Comment("Цена ниже индикатора"); 

если Вы сравниваете разность этих величин, Вы сразу освобождаетесь от необходимости нормализации величин для правильного сравнения

ну а в частности по Вашему вопросу - пересечение ценой линии индикатора это тот момент когда разность Ask- -iCustom() на прошлом вычислении была меньше нуля, а потом стала больше или наоборот

как Вы будете вычислять этот момент Ваше личное дело - может по предыдущему бару, или каждый тик, а вот такие комбинации:

 

double intersectionX = (LineX == priceA) ;

double intersectionY = (LineY == priceB) ;
Вас быстрее заведут в дебри дискретной математики, чем Вы получите желаемый результат - выражение в скобках будет равно или 0 или 1, что соответствует числовому представлению false и true
 
IgorM:


любое пересечение оптимально рассматривать как разность цены (Ask/Bid) и линии индикатора, т.е.

if (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) > 0) Comment("Цена выше индикатора"); else Comment("Цена ниже индикатора");

если Вы сравниваете разность этих величин, Вы сразу освобождаетесь от необходимости нормализации величин для правильного сравнения

ну а в частности по Вашему вопросу - пересечение ценой линии индикатора это тот момент когда разность Ask- -iCustom() на прошлом вычислении была меньше нуля, а потом стала больше или наоборот

как Вы будете вычислять этот момент Ваше личное дело - может по предыдущему бару, или каждый тик, а вот такие комбинации:

Вас быстрее заведут в дебри дискретной математики, чем Вы получите желаемый результат - выражение в скобках будет равно или 0 или 1, что соответствует числовому представлению false и true

То есть, если я правильно понял, то я могу вот так сделать:

bool intersectionX = FALSE,
     intersectionY = FALSE;
int start()

  { 
if  (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) == 0)  {
intersectionX = TRUE;
intersectionY = FALSE;
}
if  (iCustom ("EURUSD", Period_H1, "Indicator",1,0)-Bid == 0) {
intersectionY = TRUE;
intersectionX = FALSE;
}
}
и я потом смогу intersectionY использовать только тогда когда оно TRUE, если FALSE, то такой код (intersectionY > Ask) не сработает, правильно я понимаю!?
Причина обращения: