denis77515 Опубликовано 13 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2015 Oll можно и так, но я сделал так,как сделал.все работает. Я то же сначала не понял,потом сделал переменные все стало работать.Спасибо за подсказку, из головы вылетело что OP_BUY и OP_SELL это константы, и они не меняются ! Изменено 13 февраля, 2015 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 13 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 февраля, 2015 Благодарю Вас ув. Oll и Денис)))ошибки пропали)))с ув. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 Товарищи, подскажите начинающему )В чужом советнике в самом верху прописал код для установки ММ. Ошибок нет. Но при тестировании при увеличении Депозита, позволяющего открывать больший лот, изменений не происходит. Лот открывает такой же, как и при начале тестов. Подскажите, может нужно дописать какую то строчку, чтобы при открытии последующих сделок сов в первую очередь проверял это условие?Или же советники с авто ММ вообще не тестируются? double MM_Lot;double Min_Lot; int init() { Min_Lot = MarketInfo(Symbol(), MODE_MINLOT); if (MM == TRUE) MM_Lot = MathFloor((AccountFreeMargin() - AccountCredit()) / Auto_MM) * Min_Lot; else MM_Lot = BaseLotSize; Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 Rever27 функция инит отрабатывает 1 раз при запуске совы. если Вы хотите пересчитывать лот, то нужно расчёт лота делать непосредственно перед вызовом ОрдерСенд. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 Rever27 функция инит отрабатывает 1 раз при запуске совы. если Вы хотите пересчитывать лот, то нужно расчёт лота делать непосредственно перед вызовом ОрдерСенд. Поставил перед OrderSend - ничего не изменилось. Мм не меняется в зависимости от депозита. воткнул в OrderSend - Мм заработал, но построение сетки у мартина слетело. Возможно, авто мм не работает только в тесте, на реале будет иначе, буду разбираться. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 Rever27 в случае с сеткой надо рассчитывать лот только на первом ордере, иначе действительно мартин работать не будет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 0ll Расчет то идет. И советник показывает будущий ордер в соответствии с ММ (рынок закрыт, сейчас не проверю на практике), но вот как тест или оптимизацию такой Мартышки сделать, ума не приложу )Еще у меня есть такой вопрос, каверзный.Что нужно прописать в индикаторе, чтобы ограничить количество одновременно торгуемых пар, скажем до 2-3. Как это представлено в Индикаторе от Советника FxHunter? Уж больше интересная функция Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 Rever27 тест и оптимизация должны работать без проблем. хоть с ММ хоть без.По поводу Индикатора от Советника FxHunter - там идёт расчёт просадки по эквити и если она больше порога, то совы на других парах не открывают новых сеток. (ну насколько я понял) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 Rever27 тест и оптимизация должны работать без проблем. хоть с ММ хоть без.По поводу Индикатора от Советника FxHunter - там идёт расчёт просадки по эквити и если она больше порога, то совы на других парах не открывают новых сеток. (ну насколько я понял) 0ll по эквити, это да. Но там есть еще одна полезная функция - ограничивать количество торгуемых пар в одно время. т.е. если из 5 пар у нас уже 2 в рынке, то по всем остальным ставиться блок. Вот как такого написать для своего индикатора, ума не приложу )) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 Rever27 вариантов много. например: у Вас сова с магиком=111 стоит на 5 парах.В сове перед открытием сетки делаете перебор открытых ордеров по магику=111 и считаете разные символы (т.е. если текущего символа нет в строке, то symbCount++; и пишем символ в строку через ",", иначе пропускаем) по итогу подсчёта делаете вывод открывать или нет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 15 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 февраля, 2015 0ll В том то и проблема, что Маджики должны быть разные на всех парах. Для такого контроля нужна функция в отдельном индикаторе. Понимаю, что пока мало в этом понимаю :dСпасибо за советы, буду дальше учить "МатЧасть", по мере спрашивать :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 0ll В том то и проблема, что Маджики должны быть разные на всех парах. Зачем? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 0ll Так советник по Маджику проверяет открытые сделки, и не дает строить дополнительные сетки. Как же без маджика то иначе? )) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 Обычно советники фильтруют открытые ордера по (символу и магику). если одна сова стоит на нескольких парах, то совсем не обязательно менять магики.Даже если Вы создадите индюк, о котором мечтаете, то всё равно придётся вносить изменения в советник для взаимодействия с индюком и это будет не проще, чем реализовать простой подход, о котором я писал выше.Ну тут Вам решать что делать... будут конкретные вопросы - задавайте. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 Обычно советники фильтруют открытые ордера по (символу и магику). если одна сова стоит на нескольких парах, то совсем не обязательно менять магики.Даже если Вы создадите индюк, о котором мечтаете, то всё равно придётся вносить изменения в советник для взаимодействия с индюком и это будет не проще, чем реализовать простой подход, о котором я писал выше.Ну тут Вам решать что делать... будут конкретные вопросы - задавайте. На самом деле, я бы выбрал и простой подход, но моих знаний не хватит даже на его реализацию )int CountTrades(){ int count = 0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic) if (OrderSymbol() == Symbol(EURUSD) || OrderSymbol() == Symbol(GBPRUSD) //и т.д. count++ } else Ticket = OrderSend(.... } return(count);} Понимаю, что как то так я смогу выделить пары, которые сейчас в торговле, но мысль, как видно, в код я перевести не могу )И в интернете подобного кода не нашел Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 Rever27 начал почти правильно. замечания:1. ну формально, функция будет называться CountSymbol//=========================== Вызывающий код (разрешено 2 символа):if (orderCount //если на данный момент по текущему символу ордеров нет{ OrderSend(..... }else return;//=================================================int CountSymbol(){ int count = 0; string sss = ""; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (!OrderMagicNumber() == Magic) continue; if (StringFind(sss, OrderType(), 0) { sss += OrderType() + ","; count++; } } /* else Ticket = OrderSend(.... //Это не здесь нужно а в вызывающем коде */ } return(count);} как-то так... Изменено 16 февраля, 2015 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 Rever27, я как понимаю вам надо открыть две сделки по разным парам.не знаю на сколько это правильно,но себе я сделал так. Спойлер [extern int Magic = 123;int Size_usd;string Array_usd[] = {"EURUSD","GBPUSD"};//--------------------------------------------------------++int OnInit(){Size_usd=ArraySize(Array_usd);}//----------------------------------------------------------++void OnTick(){if(CountTrades(Magic,OP_SELL) == 0)Open_Orders();//---------}//----------------------------------------------------------++void Open_Orders(){int i,a;for(i=Size_usd-1; i>=0; i --){string sym_usd = Array_usd;OrderSend(sym_usd,OP_SELL,Lots,MarketInfo(sym_usd,MODE_BID),Slippage,0,0,"",Magic,0,clrRed);}}//----------------------------------------------------------++int CountTrades(int mn, int Otype){ int count = 0; for(int i=OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if((OrderMagicNumber() == mn) && (OrderType() == Otype)) count++; } } } return(count);}] Изменено 16 февраля, 2015 пользователем denis77515 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 denis77515 если коротко, то у Rever27 другая задача: ему нужно ограничить торговлю 10 одинаковым совам, стоящим на разных парах, 2 парами. т.е. те две совы, которые первыми открыли сделки, остаются в рынке и торгуют, а остальные - на забор.Полезная штука однако... Ссылка на сообщение Поделиться на другие сайты More sharing options...
denis77515 Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 ага понятно, значит я не понял.интересная задача. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rever27 Опубликовано 16 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 февраля, 2015 Спасибо всем за содействие :), я по специальности Инженер, но не унываю понять и Программирование )А функция действительно полезная для защиты депозита от высокой просадки, если сов мультивалютный.В FxHunter'е она реализована именно в индикаторе, но не думаю, что разработчики поделятся кодом )0ll код завтра попробую проверить.Только вопрос, я правильно понял, что в string sss = ""; нужно прописать все пары, что используются в торговле?И OrderSend( нужно 2 раза писать? При условии, что проверить работоспособность функции в тестере невозможно, то возможно ли создать alert для этого условия? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 17 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 февраля, 2015 Rever27 ни в коем случае не применяйте код смысл которого не поняли!!!Данная ветка "Обучение языку..." - вот и обучайтесь... Посидите со справкой в едиторе и разберите каждую строчку - это Вам нужно!На Ваши вопросы могу ответить - Вы поняли не правильно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
FoxMongoose Опубликовано 17 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 февраля, 2015 Как можно реализовать стратегию Лабушер? С помощью массива? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 17 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 февраля, 2015 Как можно реализовать стратегию Лабушер? С помощью массива???? не все думают синхронно с Вами...что за стратегия? Ссылка на сообщение Поделиться на другие сайты More sharing options...
FoxMongoose Опубликовано 17 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 февраля, 2015 Изначально это стратегия для казино.Есть заданный ряд чисел, сумма ставки равна сумме крайних чисел. При проигрыше сумма ставки добавляется к числовому ряду, при выигрыше крайние числа вычеркиваются. Когда все числа вычеркнуты, прибыль будет равна сумме чисел начального ряда.Думаю можно сделать это с помощью массива. Только надо будет определять крайние числа. Не знаю как это сделать, может с помощью цикла? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 17 февраля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 февраля, 2015 FoxMongoose "крайние" это 2 последних? ну а между 1-ым и 2-ым числом разность какая? или они одинаковые?если да, то это последовательность Фибоначчи. Можно реализовать и без массива. Опишите чётко, чтоб вопросов не возникало, можно и с примером расчёта. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти