Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 56
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
продолжаю дорабатывать :
если условие истинно
открыть ордер 1
если цена пошла куда надо или нет
открыть ордер2
LastLot= order 2 (или номер больше)
LastPrice= order2 (или номер больше)
если цена пошла куда надо или нет...
LastLot= order 3 (или номер больше)
LastPrice= order 3 (или номер больше)
проблема в чем - последний(или нет) ордер всегда будет между стоплосс и тейк, значит его значение не сбросится когда закроются остальные потому что сам ордер будет висеть. Как связать его с остальными при неизвестном количестве.
Механизм привязки последнего первого или предпоследнего к остальным оказалася неэффективен так как их количество меняется вместе с номерами.
результат должен быть примерно "если какой то из ордеров данной серии закрылся закрыть все остальные"
отсчет серии - первый ордер текущего направления(другого типа не откроет) тут или какой то дополнительный идентификатор сделать или другие способы привязки. Ключ - первый ордер открыт согласно условиям, остальные вспомогательная доливка.
есть мысли?
продолжаю дорабатывать :
если условие истинно
открыть ордер 1
если цена пошла куда надо или нет
открыть ордер2
LastLot= order 2 (или номер больше)
LastPrice= order2 (или номер больше)
если цена пошла куда надо или нет...
LastLot= order 3 (или номер больше)
LastPrice= order 3 (или номер больше)
проблема в чем - последний(или нет) ордер всегда будет между стоплосс и тейк, значит его значение не сбросится когда закроются остальные потому что сам ордер будет висеть. Как связать его с остальными при неизвестном количестве.
Механизм привязки последнего первого или предпоследнего к остальным оказалася неэффективен так как их количество меняется вместе с номерами.
результат должен быть примерно "если какой то из ордеров данной серии закрылся закрыть все остальные"
отсчет серии - первый ордер текущего направления(другого типа не откроет) тут или какой то дополнительный идентификатор сделать или другие способы привязки. Ключ - первый ордер открыт согласно условиям, остальные вспомогательная доливка.
есть мысли?
Сумбурно, непонятно. Постарайтесь более ясно излагать свои мысли.
Вот это вот: "если цена пошла куда надо или нет - открыть ордер2" - это как понять, что в любом случае "открыть ордер2"?
И дальше таких "или" только больше...
А чтобы не было вопросов типа "Как связать его с остальными при неизвестном количестве" - так сначала количество и выяснять надо.
Сумбурно, непонятно. Постарайтесь более ясно излагать свои мысли.
Вот это вот: "если цена пошла куда надо или нет - открыть ордер2" - это как понять, что в любом случае "открыть ордер2"?
И дальше таких "или" только больше...
А чтобы не было вопросов типа "Как связать его с остальными при неизвестном количестве" - так сначала количество и выяснять надо.
ок, с цифрами
курс EURUSD=1.10000
отдана команда открыть ордер на покупку согласно ТЗ по текущей(уже написано)
если EURUSD=1.10200 долить в покупку (уже написано)
если EURUSD=1.09800 долить в покупку (уже написано)
и так далее с шагом 200
если какой - либо из этих ордеров закроется (стопы и тейки стоят, но не на всех)
закрыть всю сетку
ищу способ идентифицировать сеткуок, с цифрами
курс EURUSD=1.10000
отдана команда открыть ордер на покупку согласно ТЗ по текущей(уже написано)
если EURUSD=1.10200 долить в покупку (уже написано)
если EURUSD=1.09800 долить в покупку (уже написано)
и так далее с шагом 200
если какой - либо из этих ордеров закроется (стопы и тейки стоят)
закрыть всю сетку
ищу способ идентифицировать сеткуКомментарии с номером ордера можно добавлять. А если вся серия ордеров одного типа - то и просто пересчитать их да зафиксировать количество.
я думал насчет комментариев, но судя по отзывам повар считает их несъедобными и либо удаляет либо меняет на свои
а по поводу пересчитать, то есть мне нужно считать и фиксировать количество при добавлении очередного?
а по поводу пересчитать, то есть мне нужно считать и фиксировать количество при добавлении очередного?
Да. И если количество с прошлого раза уменьшилось - закрывать все оставшиеся.
Можно ещё мониторить закрытые ордера в истории. И как появится свежезакрытый ордер, соответствующий заданным характеристикам - закрывать серию.
Можно ещё не задавать ТП/СЛ в ордере, а считать общие ТП/СЛ в советнике на всю серию. И по ним закрывать серию. Преимущества - ДЦ не видит уровни останова, уходит проблема с поиском остатков серии, если на один ордер сработал ТП или СЛ.double volume(string symbol,double risk,double sl)
{
double lot=0.0;
double procent=0.0;
double balans=0.0;
double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);
procent=(balans/100.0)*risk;
switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
{
case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
}
return(NormalizeVolume(symbol,lot));
}
Ну хорошо спрошу на простом языке .Как прописать в советнике автоматический расчет лота в зависимости от плеча ..Скажем плечо 1:50 депозит 3000..
Попробуйте вот так:
{
Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
Lots_New=0;
if(Percent > 100) {
Percent = 100;
}
if(Percent == 0) {
Lots_New = 0;
return(0);
} else {
Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
}
if(Lots_New < Min_Lot) {
Lots_New = Min_Lot;
}
if(Lots_New*One_Lot > Free) {
return(0);
}
return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}