Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Oll можно и так, но я сделал так,как сделал.все работает. Я то же сначала не понял,потом сделал переменные все стало работать.Спасибо за подсказку, из головы вылетело что OP_BUY и OP_SELL это константы, и они не меняются !

Изменено пользователем denis77515
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

Товарищи, подскажите начинающему )
В чужом советнике в самом верху прописал код для установки ММ. Ошибок нет. Но при тестировании при увеличении Депозита, позволяющего открывать больший лот, изменений не происходит. Лот открывает такой же, как и при начале тестов.
Подскажите, может нужно дописать какую то строчку, чтобы при открытии последующих сделок сов в первую очередь проверял это условие?
Или же советники с авто ММ вообще не тестируются?

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;
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Rever27 функция инит отрабатывает 1 раз при запуске совы. если Вы хотите пересчитывать лот, то нужно расчёт лота делать непосредственно перед вызовом ОрдерСенд.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Rever27 функция инит отрабатывает 1 раз при запуске совы. если Вы хотите пересчитывать лот, то нужно расчёт лота делать непосредственно перед вызовом ОрдерСенд.



Поставил перед OrderSend - ничего не изменилось. Мм не меняется в зависимости от депозита.
воткнул в OrderSend - Мм заработал, но построение сетки у мартина слетело.
Возможно, авто мм не работает только в тесте, на реале будет иначе, буду разбираться.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Rever27 в случае с сеткой надо рассчитывать лот только на первом ордере, иначе действительно мартин работать не будет.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
0ll Расчет то идет. И советник показывает будущий ордер в соответствии с ММ (рынок закрыт, сейчас не проверю на практике), но вот как тест или оптимизацию такой Мартышки сделать, ума не приложу )

Еще у меня есть такой вопрос, каверзный.
Что нужно прописать в индикаторе, чтобы ограничить количество одновременно торгуемых пар, скажем до 2-3. Как это представлено в Индикаторе от Советника FxHunter? Уж больше интересная функция
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Rever27 тест и оптимизация должны работать без проблем. хоть с ММ хоть без.
По поводу Индикатора от Советника FxHunter - там идёт расчёт просадки по эквити и если она больше порога, то совы на других парах не открывают новых сеток. (ну насколько я понял)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Rever27 тест и оптимизация должны работать без проблем. хоть с ММ хоть без.
По поводу Индикатора от Советника FxHunter - там идёт расчёт просадки по эквити и если она больше порога, то совы на других парах не открывают новых сеток. (ну насколько я понял)



0ll по эквити, это да. Но там есть еще одна полезная функция - ограничивать количество торгуемых пар в одно время. т.е. если из 5 пар у нас уже 2 в рынке, то по всем остальным ставиться блок. Вот как такого написать для своего индикатора, ума не приложу ))
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Rever27 вариантов много. например: у Вас сова с магиком=111 стоит на 5 парах.
В сове перед открытием сетки делаете перебор открытых ордеров по магику=111 и считаете разные символы (т.е. если текущего символа нет в строке, то symbCount++; и пишем символ в строку через ",", иначе пропускаем) по итогу подсчёта делаете вывод открывать или нет.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
0ll В том то и проблема, что Маджики должны быть разные на всех парах. Для такого контроля нужна функция в отдельном индикаторе.
Понимаю, что пока мало в этом понимаю :d
Спасибо за советы, буду дальше учить "МатЧасть", по мере спрашивать :)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


0ll В том то и проблема, что Маджики должны быть разные на всех парах.

Зачем?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
0ll Так советник по Маджику проверяет открытые сделки, и не дает строить дополнительные сетки. Как же без маджика то иначе? ))
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Обычно советники фильтруют открытые ордера по (символу и магику). если одна сова стоит на нескольких парах, то совсем не обязательно менять магики.
Даже если Вы создадите индюк, о котором мечтаете, то всё равно придётся вносить изменения в советник для взаимодействия с индюком и это будет не проще, чем реализовать простой подход, о котором я писал выше.
Ну тут Вам решать что делать... будут конкретные вопросы - задавайте.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Обычно советники фильтруют открытые ордера по (символу и магику). если одна сова стоит на нескольких парах, то совсем не обязательно менять магики.
Даже если Вы создадите индюк, о котором мечтаете, то всё равно придётся вносить изменения в советник для взаимодействия с индюком и это будет не проще, чем реализовать простой подход, о котором я писал выше.
Ну тут Вам решать что делать... будут конкретные вопросы - задавайте.



На самом деле, я бы выбрал и простой подход, но моих знаний не хватит даже на его реализацию )

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);
}


Понимаю, что как то так я смогу выделить пары, которые сейчас в торговле, но мысль, как видно, в код я перевести не могу )
И в интернете подобного кода не нашел
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
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);
}

как-то так...
Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

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);
}


]

Изменено пользователем denis77515
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
denis77515 если коротко, то у Rever27 другая задача: ему нужно ограничить торговлю 10 одинаковым совам, стоящим на разных парах, 2 парами. т.е. те две совы, которые первыми открыли сделки, остаются в рынке и торгуют, а остальные - на забор.
Полезная штука однако...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Спасибо всем за содействие :), я по специальности Инженер, но не унываю понять и Программирование )
А функция действительно полезная для защиты депозита от высокой просадки, если сов мультивалютный.

В FxHunter'е она реализована именно в индикаторе, но не думаю, что разработчики поделятся кодом )

0ll код завтра попробую проверить.
Только вопрос, я правильно понял, что в

string sss = "";
нужно прописать все пары, что используются в торговле?
И
OrderSend(
нужно 2 раза писать?
При условии, что проверить работоспособность функции в тестере невозможно, то возможно ли создать alert для этого условия?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Rever27 ни в коем случае не применяйте код смысл которого не поняли!!!
Данная ветка "Обучение языку..." - вот и обучайтесь...
Посидите со справкой в едиторе и разберите каждую строчку - это Вам нужно!
На Ваши вопросы могу ответить - Вы поняли не правильно.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Как можно реализовать стратегию Лабушер? С помощью массива?

??? не все думают синхронно с Вами...
что за стратегия?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Изначально это стратегия для казино.
Есть заданный ряд чисел, сумма ставки равна сумме крайних чисел. При проигрыше сумма ставки добавляется к числовому ряду, при выигрыше крайние числа вычеркиваются. Когда все числа вычеркнуты, прибыль будет равна сумме чисел начального ряда.
Думаю можно сделать это с помощью массива. Только надо будет определять крайние числа. Не знаю как это сделать, может с помощью цикла?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
FoxMongoose "крайние" это 2 последних? ну а между 1-ым и 2-ым числом разность какая? или они одинаковые?
если да, то это последовательность Фибоначчи. Можно реализовать и без массива.
Опишите чётко, чтоб вопросов не возникало, можно и с примером расчёта.
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...