Вроде переписал,только не понял где заменить GetMinPrice? Выдает ошибку именно сдесь.
double GetMinPrice() //// перенёс вниз
{
double dLow = 100000;
minprice;
for (int i=1; i {
minprice = iLow(Symbol(),0,i);
if (minprice dLow = minprice;
}
return(dLow);
}
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
double dLow = 100000;
minprice;
У тебя после 100000 стоит ";", и получается minprice не определена, надо ставить ","
Добавлено: 29-06-2013 20:20:12
Долго бился над ошибкой, сов сразу открывал максимально возможное количество ордеров пока хватало баланса.
Сверился с выложенным на форуме, расхождений нет. Потом логически перепроверил, заменил (Bid = price + Step * Point) заработало. :d
логическая ошибка, заменить надо здесь:
Если не ошибаюсь эта ошибка была уже обработана выше.
спасибо исправил,говорю тихо шифером шурша,едедет крыша не спеша . :d
Ты внимательно посмотри на место расставления и количество {} Потому что я когда тестил, заметил, что из-за неправильной расстановки {} советник открывал бесконечное количество ордеров, если не ошибаюсь... Точно сейчас не скажу просто...
я его полностью переписал,сейчас скомпилировал буду смотреть.
я его полностью переписал,сейчас скомпилировал буду смотреть.
Если что кидай, я тоже посмотрю, кстати поздравляю, твой ответ был 100-тым в теме :)
У меня просьба будет,к нему стоп лосс напрашивается,а как прикрутить его туда я пока не знаю.Идея такая,как только цена проходит пунктов 10 например,то ставится стоп на уровне без убытка общий для всех ордеров,потом тянется за ценой там через (N-пунктов) в общем закрывается либо по стопу либо по тейку как идея тебе,сможешь помочь ?
У меня просьба будет,к нему стоп лосс напрашивается,а как прикрутить его туда я пока не знаю.Идея такая,как только цена проходит пунктов 10 например,то ставится стоп на уровне без убытка общий для всех ордеров,потом тянется за ценой там через (N-пунктов) в общем закрывается либо по стопу либо по тейку как идея тебе,сможешь помочь ?
Ну это трейлинг стоп называется. Идея не плохая. Но я только учусь, трейлинг никогда не писал еще. Надо подождать, когда кто-нибудь опытнее появится :)
ну что поделать будем ждать,да сам эксперементировать буду.к стати спасибо за подсказку,вот держи свежий.
Добавлено: 30-06-2013 10:03:25
Забыл еще написать, я его гонял на тесторе,вот только не увидел что б он открывал ордера SELL, почему не кто не подскажет ?
Изменено 30 июня, 2013 пользователем denis77515
Забыл про нас чайников наш учитель... :-o А трейлинг прикрутить просто, вот готовый от Ритки .
Мне не нужен просто трелинг стоп,вся фишка заключается в том что,когда ордера модифицируются и цена идет в сторону профита,ближе к нему,вот только тогда выставляется стоп лосс в уровень без убытка и начинает тянуться за ценой.общий ля всех ордеров находящихся в рынке.То есть все открытые ордера,закрываются либо по стопу,либо по тейку. Помойму доходчиво пояснил.А таких трелингов в сети море,у меня их штук пяток точно есть.Так они каждый стоп тянут отдельно для каждого ордера,мне нужен один для всех.
ну что поделать будем ждать,да сам эксперементировать буду.к стати спасибо за подсказку,вот держи свежий.
Добавлено: 30-06-2013 10:03:25
Забыл еще написать, я его гонял на тесторе,вот только не увидел что б он открывал ордера SELL, почему не кто не подскажет ?
Ордера на продажу не открываются по причине ошибки в нахождении цены максимума...
поищи внимательно. И посмотри внимательно на условие открытия следующего колена для продаж....
Забыл про нас чайников наш учитель... :-o А трейлинг прикрутить просто, вот готовый от Ритки .
Да хватает Трейлингов в сети, но весь смысл в том чтоб самому под себя написать...
ну что поделать будем ждать,да сам эксперементировать буду.к стати спасибо за подсказку,вот держи свежий.
Добавлено: 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);
}
}
ну что поделать будем ждать,да сам эксперементировать буду.к стати спасибо за подсказку,вот держи свежий.
Добавлено: 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);
}
}
Согласен, но и ошибок в коде хватает. После того как поправил получается что он открывает сперва Бай, потом Селл и тупо работает с продажами, потом когда срабатывает ТП у продаж, опять открывает Бай, потом Селл и работает с продажами и т.д.
Тоесть с ценами МаксПрайс, МинПрайс, как я думаю нужно работать на пробитие.
Изменено 30 июня, 2013 пользователем Dimasyok
Что вы от меня хотите,я если начал заниматься этим,месяц,может не многим больше.Вполне естественно,что и ошибок море.Я что от делать не чего, сижу на форуме.Так вы ребята по опытнее,вот и подсказываете чайнику.Спасибо за это,так качественного материала по обучению,просто пока нету.Надеюсь господин xbms сделает это.
Что вы от меня хотите,я если начал заниматься этим,месяц,может не многим больше.Вполне естественно,что и ошибок море.Я что от делать не чего, сижу на форуме.Так вы ребята по опытнее,вот и подсказываете чайнику.Спасибо за это,так качественного материала по обучению,просто пока нету.Надеюсь господин xbms сделает это.
Ну ты правишь, то что тебе пишут ?:) Мне сейчас уходить пора, вечером буду, чем смогу, тем помогу.
спасибо свяжемся.
Пример прикрутки трала.
Люди поясните чайнику если мы получаем из вот этого выражения наименьшею цену , указанных 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);
или я опять чего то не догнал. Условие на покупку один в один,так вот в покупку открывает ордера в продажу нет.В чем опять я ошибаюсь не пойму.
Люди поясните чайнику если мы получаем из вот этого выражения наименьшею цену , указанных 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 бара ты покупал и если ниже максимума продвать. Получается у тебя постоянное условие как на покупку так и на продажу, в результате он покупает, потому что условие покупки в коде стоит раньше, а потом продавать то уже и некак.
Изменено 30 июня, 2013 пользователем Dimasyok
должно открыться так,сравнится цена двух предыдущих баров,и если цена ниже последнего,то открываем рыночный ордер на продажу,в покупку на оборот.
должно открыться так,сравнится цена двух предыдущих баров,и если цена ниже последнего,то открываем рыночный ордер на продажу,в покупку на оборот.
Тогда вот условие на покупку:
if (Close[1] > maxprice && CountTrades()==0)
Close[1] - цена закрытия предыдущего бара.
Аналогично на продажу:
if(Close[1]
вставил не работает,посмотри брат запарился уже на смерть.Потом скинь мне его,возьму книжку и буду сравнивать.чего и как он там работает.
У тебя здесь ошибка
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;
Изменено 30 июня, 2013 пользователем Romhacker
У тебя здесь ошибка
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
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем