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

От xbms, 13 апреля, 2013 в Уголок Программиста

#101

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

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

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

#102

double dLow = 100000;
minprice;

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


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


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

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



Если не ошибаюсь эта ошибка была уже обработана выше.
#103

спасибо исправил,говорю тихо шифером шурша,едедет крыша не спеша . :d

#104

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

#105

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

#106


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



Если что кидай, я тоже посмотрю, кстати поздравляю, твой ответ был 100-тым в теме :)
#107

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

#108


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




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

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


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

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

Cool_Master___v_3_1_AUTO.mq431 скач.

Изменено 30 июня, 2013 пользователем denis77515

#110

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

тралингатор.txt100 скач.

#111

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

#112


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


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

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


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


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



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


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


Добавлено: 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);
}
}
#114



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


Добавлено: 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

#115

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

#116


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



Ну ты правишь, то что тебе пишут ?:) Мне сейчас уходить пора, вечером буду, чем смогу, тем помогу.
#117

спасибо свяжемся.

#119

Люди поясните чайнику если мы получаем из вот этого выражения наименьшею цену , указанных 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);

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

#120


Люди поясните чайнику если мы получаем из вот этого выражения наименьшею цену , указанных 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

#121

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

#122


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



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

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

Аналогично на продажу:
if(Close[1]
#123

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

ЧЕРНОВИК12.mq419 скач.

#124

У тебя здесь ошибка
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

#125


У тебя здесь ошибка
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

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

Перейти к списку тем
Форум · 2.0.20260627.0025