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 равным значению ltif (lt>=MaxLot) ltcorr=MaxLot; // Проверим превышение допустимых ...if (lt<=MinLot) ltcorr=MinLot; // ... значений лотаdouble Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позыif (Money<TradeMrg) // Если свободных средств больше, чем цена позиции -
{
return(ltcorr); // ... возвращаем неизменённый лот
}
elseif (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: Давайте я вам дам удочку... :) В функции, предлагаемой ниже есть все данные для рассчёта нужных вам параметров. Меня такая лень обуяла, что даже по клавишам влом стучать...
Сами найдёте, что нужно и переделаете под себя... Сам код настолько прост и доступен, что никому труда не составит его переделать...
Один вопрос...
А зачем вам торговля как у Гитлера в конце войны... Тот набрал детишек в ГитлерЮгенд, так сказать, мясо на один выстрел фауст-патрона...
Ничего не напоминает?????
ИМХО, конечно...
Спасибо!
Не максимальным объёмом не собираюсь открываться, просто нужно его посчитать исходя из размера Депо, для дальнейших математических операций =))
подскажите код или ветку, как запоминать пересечения линии индикатора с ценой. я где то видел, но что то не могу найти. Заранее благодарен.
но меня интересует больше, как то так :
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;
}
подскажите код или ветку, как запоминать пересечения линии индикатора с ценой. я где то видел, но что то не могу найти. Заранее благодарен.
но меня интересует больше, как то так :
любое пересечение оптимально рассматривать как разность цены (Ask/Bid) и линии индикатора, т.е.
if (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) > 0) Comment("Цена выше индикатора"); else Comment("Цена ниже индикатора");
если Вы сравниваете разность этих величин, Вы сразу освобождаетесь от необходимости нормализации величин для правильного сравнения
ну а в частности по Вашему вопросу - пересечение ценой линии индикатора это тот момент когда разность Ask- -iCustom() на прошлом вычислении была меньше нуля, а потом стала больше или наоборот
как Вы будете вычислять этот момент Ваше личное дело - может по предыдущему бару, или каждый тик, а вот такие комбинации:
Вас быстрее заведут в дебри дискретной математики, чем Вы получите желаемый результат - выражение в скобках будет равно или 0 или 1, что соответствует числовому представлению false и true
любое пересечение оптимально рассматривать как разность цены (Ask/Bid) и линии индикатора, т.е.
if (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) > 0) Comment("Цена выше индикатора"); else Comment("Цена ниже индикатора");
если Вы сравниваете разность этих величин, Вы сразу освобождаетесь от необходимости нормализации величин для правильного сравнения
ну а в частности по Вашему вопросу - пересечение ценой линии индикатора это тот момент когда разность Ask- -iCustom() на прошлом вычислении была меньше нуля, а потом стала больше или наоборот
как Вы будете вычислять этот момент Ваше личное дело - может по предыдущему бару, или каждый тик, а вот такие комбинации:
Вас быстрее заведут в дебри дискретной математики, чем Вы получите желаемый результат - выражение в скобках будет равно или 0 или 1, что соответствует числовому представлению false и true
То есть, если я правильно понял, то я могу вот так сделать:
и я потом смогу intersectionY использовать только тогда когда оно TRUE, если FALSE, то такой код (intersectionY > Ask) не сработает, правильно я понимаю!?
Панятна.
К стати в MQL4 есть таймер или только в MQL5?
наверно только эти ф-ции:
https://www.mql5.com/ru/search?utm_campaign=MQL4.community
https://www.mql5.com/ru/search?utm_campaign=MQL4.communityВопрос аксакалам
внезапно тестер перестал работать, чешет нет исторических данных.
Что с ним делать?
для сведения: Архив котировок загружен
мне помогла перезагрузка терминала и предварительное удаление скачанных котировок в папке: C:\Program Files\MetaTrader - Alpari\history\Alpari-Micro2
затем заново скачал архив котировок
Подскажите пожалуйста функцию, которая вычисляет максимально возможный объём открытия ордера?
В функции, предлагаемой ниже есть все данные для рассчёта нужных вам параметров. Меня такая лень обуяла, что даже по клавишам влом стучать...
Сами найдёте, что нужно и переделаете под себя... Сам код настолько прост и доступен, что никому труда не составит его переделать...
Один вопрос...
А зачем вам торговля как у Гитлера в конце войны... Тот набрал детишек в ГитлерЮгенд, так сказать, мясо на один выстрел фауст-патрона...
Ничего не напоминает?????
ИМХО, конечно...
Давайте я вам дам удочку... :)
В функции, предлагаемой ниже есть все данные для рассчёта нужных вам параметров. Меня такая лень обуяла, что даже по клавишам влом стучать...
Сами найдёте, что нужно и переделаете под себя... Сам код настолько прост и доступен, что никому труда не составит его переделать...
Один вопрос...
А зачем вам торговля как у Гитлера в конце войны... Тот набрал детишек в ГитлерЮгенд, так сказать, мясо на один выстрел фауст-патрона...
Ничего не напоминает?????
ИМХО, конечно...
Спасибо!
Не максимальным объёмом не собираюсь открываться, просто нужно его посчитать исходя из размера Депо, для дальнейших математических операций =))
Спасибо!
Не максимальным объёмом не собираюсь открываться, просто нужно его посчитать исходя из размера Депо, для дальнейших математических операций =))
для 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
для 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
... ну ты, Игорь, торопыжка... :)
Не успел я пальцы к клаве придвинуть, а ты уже отписался... :)
Привет!
подскажите код или ветку, как запоминать пересечения линии индикатора с ценой. я где то видел, но что то не могу найти. Заранее благодарен.
но меня интересует больше, как то так :
Привет!
подскажите код или ветку, как запоминать пересечения линии индикатора с ценой. я где то видел, но что то не могу найти. Заранее благодарен.
но меня интересует больше, как то так :
любое пересечение оптимально рассматривать как разность цены (Ask/Bid) и линии индикатора, т.е.
if (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) > 0) Comment("Цена выше индикатора"); else Comment("Цена ниже индикатора");
если Вы сравниваете разность этих величин, Вы сразу освобождаетесь от необходимости нормализации величин для правильного сравнения
ну а в частности по Вашему вопросу - пересечение ценой линии индикатора это тот момент когда разность Ask- -iCustom() на прошлом вычислении была меньше нуля, а потом стала больше или наоборот
как Вы будете вычислять этот момент Ваше личное дело - может по предыдущему бару, или каждый тик, а вот такие комбинации:
Вас быстрее заведут в дебри дискретной математики, чем Вы получите желаемый результат - выражение в скобках будет равно или 0 или 1, что соответствует числовому представлению false и trueлюбое пересечение оптимально рассматривать как разность цены (Ask/Bid) и линии индикатора, т.е.
if (Ask-iCustom ("EURUSD", Period_H1, "Indicator",0,0) > 0) Comment("Цена выше индикатора"); else Comment("Цена ниже индикатора");
если Вы сравниваете разность этих величин, Вы сразу освобождаетесь от необходимости нормализации величин для правильного сравнения
ну а в частности по Вашему вопросу - пересечение ценой линии индикатора это тот момент когда разность Ask- -iCustom() на прошлом вычислении была меньше нуля, а потом стала больше или наоборот
как Вы будете вычислять этот момент Ваше личное дело - может по предыдущему бару, или каждый тик, а вот такие комбинации:
Вас быстрее заведут в дебри дискретной математики, чем Вы получите желаемый результат - выражение в скобках будет равно или 0 или 1, что соответствует числовому представлению false и trueТо есть, если я правильно понял, то я могу вот так сделать: