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

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


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

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

Вроде переписал,только не понял где заменить GetMinPrice? Выдает ошибку именно сдесь.

double GetMinPrice() //// перенёс вниз
{
double dLow = 100000;
minprice;

for (int i=1; i {
minprice = iLow(Symbol(),0,i);
if (minprice dLow = minprice;
}
return(dLow);
}

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

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

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

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

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

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

Перейти

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

Перейти

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

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

double dLow = 100000;
minprice;

У тебя после 100000 стоит ";", и получается minprice не определена, надо ставить ","


Добавлено: 29-06-2013 20:20:12


Долго бился над ошибкой, сов сразу открывал максимально возможное количество ордеров пока хватало баланса.
Сверился с выложенным на форуме, расхождений нет. Потом логически перепроверил, заменил (Bid = price + Step * Point) заработало. :d

логическая ошибка, заменить надо здесь:



Если не ошибаюсь эта ошибка была уже обработана выше.
Ссылка на сообщение
Поделиться на другие сайты

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

Ты внимательно посмотри на место расставления и количество {} Потому что я когда тестил, заметил, что из-за неправильной расстановки {} советник открывал бесконечное количество ордеров, если не ошибаюсь... Точно сейчас не скажу просто...

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

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


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



Если что кидай, я тоже посмотрю, кстати поздравляю, твой ответ был 100-тым в теме :)
Ссылка на сообщение
Поделиться на другие сайты

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

У меня просьба будет,к нему стоп лосс напрашивается,а как прикрутить его туда я пока не знаю.Идея такая,как только цена проходит пунктов 10 например,то ставится стоп на уровне без убытка общий для всех ордеров,потом тянется за ценой там через (N-пунктов) в общем закрывается либо по стопу либо по тейку как идея тебе,сможешь помочь ?

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

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


У меня просьба будет,к нему стоп лосс напрашивается,а как прикрутить его туда я пока не знаю.Идея такая,как только цена проходит пунктов 10 например,то ставится стоп на уровне без убытка общий для всех ордеров,потом тянется за ценой там через (N-пунктов) в общем закрывается либо по стопу либо по тейку как идея тебе,сможешь помочь ?




Ну это трейлинг стоп называется. Идея не плохая. Но я только учусь, трейлинг никогда не писал еще. Надо подождать, когда кто-нибудь опытнее появится :)
Ссылка на сообщение
Поделиться на другие сайты

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

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


Добавлено: 30-06-2013 10:03:25

Забыл еще написать, я его гонял на тесторе,вот только не увидел что б он открывал ордера SELL, почему не кто не подскажет ?

Cool_Master___v_3_1_AUTO.mq4

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

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

Забыл про нас чайников наш учитель... :-o А трейлинг прикрутить просто, вот готовый от Ритки .

тралингатор.txt

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

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

Мне не нужен просто трелинг стоп,вся фишка заключается в том что,когда ордера модифицируются и цена идет в сторону профита,ближе к нему,вот только тогда выставляется стоп лосс в уровень без убытка и начинает тянуться за ценой.общий ля всех ордеров находящихся в рынке.То есть все открытые ордера,закрываются либо по стопу,либо по тейку. Помойму доходчиво пояснил.А таких трелингов в сети море,у меня их штук пяток точно есть.Так они каждый стоп тянут отдельно для каждого ордера,мне нужен один для всех.

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

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


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


Добавлено: 30-06-2013 10:03:25

Забыл еще написать, я его гонял на тесторе,вот только не увидел что б он открывал ордера SELL, почему не кто не подскажет ?


Ордера на продажу не открываются по причине ошибки в нахождении цены максимума...
поищи внимательно. И посмотри внимательно на условие открытия следующего колена для продаж....


Забыл про нас чайников наш учитель... :-o А трейлинг прикрутить просто, вот готовый от Ритки .



Да хватает Трейлингов в сети, но весь смысл в том чтоб самому под себя написать...
Ссылка на сообщение
Поделиться на другие сайты

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


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


Добавлено: 30-06-2013 10:03:25

Забыл еще написать, я его гонял на тесторе,вот только не увидел что б он открывал ордера SELL, почему не кто не подскажет ?

Я это ещё давно заметил. У тебя условия входа неправильные. У тебя получается, что всегда выполняется на покупку. У тебя так если цена Аск выше лоу, то купить, иначе, если цена ниже хая, продать. Получается сама цена должна находится внутри бара. А если цена находится внутри, то, естественно, будет всегда выполнться первое условие, т.е. на покупку. Надо написать так:
if(Ask > maxprice){
//Buy
};
else if(Bid //Sell
}
А у тебя так:
if (Ask > minprice)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic,0, Blue);
if (ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
else if(Bid maxprice)
{
ticket =OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
Ссылка на сообщение
Поделиться на другие сайты

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



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


Добавлено: 30-06-2013 10:03:25

Забыл еще написать, я его гонял на тесторе,вот только не увидел что б он открывал ордера SELL, почему не кто не подскажет ?

Я это ещё давно заметил. У тебя условия входа неправильные. У тебя получается, что всегда выполняется на покупку. У тебя так если цена Аск выше лоу, то купить, иначе, если цена ниже хая, продать. Получается сама цена должна находится внутри бара. А если цена находится внутри, то, естественно, будет всегда выполнться первое условие, т.е. на покупку. Надо написать так:
if(Ask > maxprice){
//Buy
};
else if(Bid //Sell
}
А у тебя так:
if (Ask > minprice)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic,0, Blue);
if (ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
else if(Bid maxprice)
{
ticket =OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}


Согласен, но и ошибок в коде хватает. После того как поправил получается что он открывает сперва Бай, потом Селл и тупо работает с продажами, потом когда срабатывает ТП у продаж, опять открывает Бай, потом Селл и работает с продажами и т.д.
Тоесть с ценами МаксПрайс, МинПрайс, как я думаю нужно работать на пробитие. Изменено пользователем Dimasyok
Ссылка на сообщение
Поделиться на другие сайты

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

Что вы от меня хотите,я если начал заниматься этим,месяц,может не многим больше.Вполне естественно,что и ошибок море.Я что от делать не чего, сижу на форуме.Так вы ребята по опытнее,вот и подсказываете чайнику.Спасибо за это,так качественного материала по обучению,просто пока нету.Надеюсь господин xbms сделает это.

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

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


Что вы от меня хотите,я если начал заниматься этим,месяц,может не многим больше.Вполне естественно,что и ошибок море.Я что от делать не чего, сижу на форуме.Так вы ребята по опытнее,вот и подсказываете чайнику.Спасибо за это,так качественного материала по обучению,просто пока нету.Надеюсь господин xbms сделает это.



Ну ты правишь, то что тебе пишут ?:) Мне сейчас уходить пора, вечером буду, чем смогу, тем помогу.
Ссылка на сообщение
Поделиться на другие сайты

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

Люди поясните чайнику если мы получаем из вот этого выражения наименьшею цену , указанных BarCount,

double GetMinPrice()
{
double dLow = 100000,
minprice;

for (int i=1; i {
minprice = iLow(Symbol(),0,i);
if (minprice dLow = minprice;
}
return(dLow);
}

то логически будет что;

if(Bid {
ticket =OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);

или я опять чего то не догнал. Условие на покупку один в один,так вот в покупку открывает ордера в продажу нет.В чем опять я ошибаюсь не пойму.

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

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


Люди поясните чайнику если мы получаем из вот этого выражения наименьшею цену , указанных BarCount,

double GetMinPrice()
{
double dLow = 100000,
minprice;

for (int i=1; i {
minprice = iLow(Symbol(),0,i);
if (minprice dLow = minprice;
}
return(dLow);
}

то логически будет что;

if(Bid {
ticket =OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
if (ticket > 0)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);

или я опять чего то не догнал. Условие на покупку один в один,так вот в покупку открывает ордера в продажу нет.В чем опять я ошибаюсь не пойму.



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


if(Bid условие на пробитие

И опять, я тебе говорил проверь функции нахождения максимума. У тебя не находится максимум в результате не получается продажа.
Но в основе проблема в самой ТС. Ты хочешь, чтоб если цена был выше минимума за 2 бара ты покупал и если ниже максимума продвать. Получается у тебя постоянное условие как на покупку так и на продажу, в результате он покупает, потому что условие покупки в коде стоит раньше, а потом продавать то уже и некак. Изменено пользователем Dimasyok
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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


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



Тогда вот условие на покупку:
if (Close[1] > maxprice && CountTrades()==0)

Close[1] - цена закрытия предыдущего бара.

Аналогично на продажу:
if(Close[1]
Ссылка на сообщение
Поделиться на другие сайты

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

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

ЧЕРНОВИК12.mq4

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

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

У тебя здесь ошибка
double GetMaxPrice() //// перенёс вниз
{
double dHigh = 0,
maxprice;
for (int i=1; i {
maxprice = iHigh(Symbol(),0, i);
if (maxprice dHigh)
dHigh = maxprice;
}
return(dHigh);
}
Знак > должен стоять.


Добавлено: 30-06-2013 15:52:54

надо так:
if (maxprice > dHigh)
dHigh = maxprice;

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

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


У тебя здесь ошибка
double GetMaxPrice() //// перенёс вниз
{
double dHigh = 0,
maxprice;
for (int i=1; i {
maxprice = iHigh(Symbol(),0, i);
if (maxprice dHigh)
dHigh = maxprice;
}
return(dHigh);
}
Знак > должен стоять.


Добавлено: 30-06-2013 15:52:54

надо так:
if (maxprice > dHigh)
dHigh = maxprice;



Вот умник:) Пусть бы сам нашел :D
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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