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

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

#2151

все равно не работает! Привожу код еще раз со всеми исправлениями:


if (ticket>0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
{
if (OrderStopLoss()
else

if (NormalizeDouble(Ask {
SL = NormalizeDouble(OrderOpenPrice() - TralingStep*Point, Digits);
bool modify = OrderModify(ticket, OrderOpenPrice(), SL, OrderTakeProfit(), Blue);
}
else

return;


}
}
#2152


Мы-же здесь учимся кодировать... Я думаю если человеку нужен готовый код, то в гугле сразу найдёт.


дак никто ж и не говорит, что не надо писать самому.
Но надо получить представление хотя бы об азах структурного программирования, да и как выглядит код первоклассного программиста тоже не лишне увидеть.
Разобрать, изучить, понять до оператора 3-5 чужих качественных кодов - это еще какая школа.
#2153
Старик да я согласен... просто стараюсь тут не давать готовых решений, а разбирать чужие косяки...

nct21 Вы не все ошибки исправили из моего предыдущего поста - будьте внимательны...
#2154

все равно не работает! вроде все поправил. текущий код для СЕЛЛ, бай вообще пока не трогаю!:


if (ticket>0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
{
if (OrderStopLoss()
else

if (Ask {
SL = NormalizeDouble(OrderOpenPrice() - TralingStep*Point, Digits);
bool modify = OrderModify(ticket, OrderOpenPrice(), SL, OrderTakeProfit(), Blue);
}
else

return;

}
}
#2155
nct21 по данно му фрагменту замечаний нет. Ставьте Print() после каждого if() с понятным комментом и смотрите как выполняется...
#2156

Всем привет ! У меня вопрос, есть советник и индикатор к нему. Связка работает хорошо, дала за месяц 70% прибыли при 20% просадки. Автор говорит что советник не работает без индюка. Смотрю информацию по буферам индикатора в окне данных, но там только название индикатора в последней строчке и все. Может ли советник получать информацию от индикатора без буферов ? Сова бесплатно работает только на демо, хочу написать свою с использованием индикатора.

#2157

Может ли советник получать информацию от индикатора без буферов ? Сова бесплатно работает только на демо, хочу написать свою с использованием индикатора.

Может. Встречал несколько вариантов. А где индюк? а в тестере сова работает?
#2158

Индюк выкладываю, имя файла изменено. для тестера автором написан другой советник - только для тестов. _http://www.myfxbook.com/members/AtnetFX/fx-levels/1208200

Levels.ex49 скач.

#2159
atnet Что-то Вы темните... ну-да ладно.
Индюк перерисовывает - 2 раза запустил на одном и том-же графике (он-лайн) показал разные уровни.
Индюк защищён - в защитах не силён - не моя тема. Чтоб на нём делать сову надо его исследовать, т.е. писать специальные совы и скрипты для исследования следов его работы. Т.е. что в буфере, доступ к графическим объектам. глобальных переменных вроде нет, но надо смотреть не создает ли сова файл, в который пишет данные индюк.
Много работы. т.к. Вы инфу не выкладываете, то занимайтесь сами.
#2160

Да мне то скрывать нечего, я ведь не автор. А так инфа находиться здесь

Спойлер


_http://forexsystems.ru/sovetniki-eksperty-foreks-roboty/78759-fx-levels-pro-monsters-%C2%A9-triada-dlya-effektivnoi-torgovli-indikator-ekspert-i-tester-4.html



Я лишь хотел узнать возможна ли работа без буферов. Теперь все понятно. Спасибо.
#2161

Всем привет!
Прошу помощи в решении слующей задачи:
выставлен отложенный ордер с последующей его модификацией. код модификации следующий void ModifyOrdersbuystop () // используется
{
for (int i=OrdersTotal()-1; i>=0;i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUYSTOP)
{
if (OrderOpenPrice()>high1+rasstoynie)
{
SL=NormalizeDouble(low1-rasstoynie,Digits);;
double TPbuy=NormalizeDouble(OrderOpenPrice()+(OrderOpenPrice()-SL)*Koef,Digits);

if (OrderStopLoss()!=SL)
if (OrderModify(OrderTicket(), bidbuy, SL,0,0))
{
Print(" Buystop изменен SL");
}
else Print (" Buystop НЕ изменен SL");
if (OrderTakeProfit()!=TPbuy)
if (OrderModify(OrderTicket(), bidbuy, SL, TPbuy,0,0))
{
Print(" Buystop изменен TP");
}
else Print (" Buystop НЕ изменен TP");
}
}
}
}
}
}
Задача следующая: после срабатывания отложенного ордера, необходимо запомнить и больше не изменять тейк профит рыночного ордера buy с тейкпрофитом, который был у buystop.
Например: отложенный ордер buystop выставлен по цене 1.5681 sl=1.5864. После модификации ордера buystop стало: цена 1.5723 sl=1.5912 tp=1.4526. Сработал ордер buystop и стал ордеров buy по цене 1.5723 sl 1.5912 tp 1.4526 (причем тейкпрофит рыночного ордера должен быть равен TP ордера buystop).

#2162
Crik
Даже не понял в чём вопрос. Ну сработал ордер - зачем "запоминать" ТР чтоб его не менять? - просто его не меняйте и всё.
Зачем показали код? там кстати логическая ошибка - Вы когда СЛ меняете ставите ТР = 0, а потом меняете ТР и опять передаёте в функцию СЛ - может глючить и выдавать ошибку модификации.

Изменено 1 мая, 2015 пользователем 0ll

#2163


Crik
Даже не понял в чём вопрос. Ну сработал ордер - зачем "запоминать" ТР чтоб его не менять? - просто его не меняйте и всё.
Зачем показали код? там кстати логическая ошибка - Вы когда СЛ меняете ставите ТР = 0, а потом меняете ТР и опять передаёте в функцию СЛ - может глючить и выдавать ошибку модификации.



так если отложенного ордера нет, то и и его тейкпрофит равен нулю. разве нет?
#2164

так если отложенного ордера нет, то и и его тейкпрофит равен нулю. разве нет?

Ордера нет и тейка нет ! ;)
Вы о чём? Если о своём коде, то там идёт модификация отложки от текущего low
SL=NormalizeDouble(low1-rasstoynie,Digits);;
double TPbuy=NormalizeDouble(OrderOpenPrice()+(OrderOpenPrice()-SL)*Koef,Digits);
Я даже возомнил, что на каждой свече и поэтому указал на немного некорректный участок - т.е. отложка вроде-как была и даже ТР и СЛ у неё были...
#2165

Привет всем :-H.

Хочу использовать в эксперте индикатор SRm. Но ни как не могу получить с него данные. В тестере показывает значение только до начала тестирования и остальное вырисовывается только после остановки тестера, соответственно и в окне ничего не рисует пока тест не завершен ну и буферы полную чепуху показывают.

Может кто нибудь помочь!!!

SR_индикатор.zip9 скач.

#2166

Здравствуйте! Подскажите как правильно использовать данные с этого индикатора, пытался использовать стандартные значения iCustom(NULL, 0, "LuKu_SSA_v30", SSA_Lag , SSA_NumComps, SSA_PeriodNorm, PCA_Lag, PCA_NumComps, PCA_PeriodNorm, MaMode, 3, 1) сразу перегружает память и терминал зависает, :(

SSA.zip12 скач.

#2167

Дуплетом...
rva7171 индюк криво написан. в некоторых условиях может некорректно работать. +для старого билда. Исправлять долго - времени нет. Если хотите, чтоб кто-нибудь занялся исправлением - покажите его ценность.

AlanG по Вашему вопросу невозможно понять какой тип данных у переменных передаваемых в индюк, но если тупо посчитать количество внешних переменных индюка, то сильно не совпадает (в 2 раза). Рекомендую внести в вызов ВСЕ extern переменные, включая строковые, даже если это только подписи (можно ""). Индюк делает спектральный анализ, сопряжённый с вычислением матриц не детского размера (тысячи строк), поэтому даже в случае корректного вызова возможен завис МТ.

#2168



AlanG по Вашему вопросу невозможно понять какой тип данных у переменных передаваемых в индюк, но если тупо посчитать количество внешних переменных индюка, то сильно не совпадает (в 2 раза). Рекомендую внести в вызов ВСЕ extern переменные, включая строковые, даже если это только подписи (можно ""). Индюк делает спектральный анализ, сопряжённый с вычислением матриц не детского размера (тысячи строк), поэтому даже в случае корректного вызова возможен завис МТ.


0ll Спасибо. попробую
#2169

При модификации ордера переодически показывает ошибку ordermodify error 1. первый и второй ордер модифицирует и без ошибок, а третий оредр модифицирует но выдает ошибку ordermodify error 1. в связи с чем это связано?

Изменено 2 мая, 2015 пользователем Crik

#2170
Crik видимо пытаетесь модифицировать теми-же значениями. Пробуйте проверять СЛ и ТР перед модификацией на минимальное отклонение типа: if (MathAbs(SL - OrderStopLoss())
#2171


Crik видимо пытаетесь модифицировать теми-же значениями. Пробуйте проверять СЛ и ТР перед модификацией на минимальное отклонение типа: if (MathAbs(SL - OrderStopLoss())


так почему первые ордера отработывает нармально, а с третьего начинает чудить?
if (OrderType() == OP_SELL)
{

if (OrderStopLoss()!=h)
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), h, OrderTakeProfit(),0,0))
{
Print(" sell");
}

Добавлено: 02-05-2015 22:08:29



Crik видимо пытаетесь модифицировать теми-же значениями. Пробуйте проверять СЛ и ТР перед модификацией на минимальное отклонение типа: if (MathAbs(SL - OrderStopLoss())


так почему первые ордера отработывает нармально, а с третьего начинает чудить?
if (OrderType() == OP_SELL)
{

if (OrderStopLoss()!=h)
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), h, OrderTakeProfit(),0,0))
{
Print(" sell");
}



Разобрался, заработало.

Изменено 3 мая, 2015 пользователем Crik

#2172

написал тестовый советник. никак не пойму, почему на некоторых валютных парах (например EURNZD), на одном баре открываются сделки одна за одной? Пример на картинке.

Из-за чего такое происходит и как этого избежать?

buy.png

#2173
nct21 перед открытием ордера проверяйте наличие открытых ордеров данной совой по магику.
#2174

Здравствуйте!
Друзья подскажите как написать код так, что при одном сигнале открывалась одна сделка? (а не накаждом тике и не на открытии следующей свечи) Пример представлен на картинке.

Рисунок1.JPG

#2175
Sany2912 сигналы возникают как правило на 1 баре. надо сохранить время открытия бара, отправить ордер, а на следующем тике проверить если время совпало, то значит сигнал отработан - выход. пример:
static datetime sigDT;
if ( /условия входа/ && sigDT != Time[0]) { sigDT = Time[0]; OrderSend(...); } else { return; }
как-то так. а что за индюк волшебный?

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

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