Блог им. neophyte

К концу дня перестал соображать...

К концу дня совсем перестал соображать...
Сегодня завершал настройку второстепенных параметров советников. Завершил и начал тестировать.
Три часа угробил разбираясь в тесте и не понимая почему робот прекращает торговлю.
Оказывается размер сделки с ростом капитала выходил вверх за 100 лотов, а больше 100 лотов в одном ордере брокер открывать не разрешает.
Поставил переход, если больше 100, то все равно 100. И все наладилось.
Красивая картинка, сумасшедший профит. Жалко на реале такого не бывает...

 К концу дня перестал соображать...

Но в общем-то в выходные наверное надо отдыхать.

P.S. Осталась одна нереализованная идея — асимметрия торгового риска для портфельной торговли. Пока не знаю как подступиться, но все-таки на следующей неделе наверное сделаю.
В связи с этим совершенно дилетантская просьба к специалистам по MQL4: как выделить последнюю по времени закрытую сделку по инструменту, а точнее, как определить результат последней закрытой сделки — прибыльный или убыточный?
Решения, которые под рукой громоздки и не совсем для меня понятны, может это тоже из-за усталости к концу дня и потому что вдруг закончился запас кофе.

Тест с асимметрией риска (для одного инструмента сделано, нет для портфеля.):

К концу дня перестал соображать... 
В чем плюс? Больше прибыль, меньше просадка.

P.P.S. Половина купонов, которые на прошлой неделе расхватали, осталась неиспользованной + появились новые. По 15 долларов. 
Пропадут. Налетайте и забирайте, кому надо. Для центовых счетов самый раз, сам бы взял, но нужно отдавать на сторону.
Если у кого-то ключ не сработает, вышлю еще.

 

★2
54 комментария
Николай, съездите на рыбалку, охоту, на недельку, думаю пойдет Вам на пользу… отдохните…
avatar
Руслан Вяз, видите ли в чем дело. У меня другое хобби. Оно связано с рынками и полностью совпадает с тем, чем я занимаюсь сейчас. Остальное мне скучно и вызывает зевоту. Лудоман однако.
avatar
Николай Скриган, Ваши посты очень интересны, пишите нам о достижениях! А о рыбалке подумайте)
avatar

Lankfrend, да я думал.

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

Плюс проблема куда поехать и с кем, поскольку в ближайшем окружении рыболовов нет. А с кем попало хуже чем ни с кем...

avatar
Николай Скриган, на крайней случай если есть возможность с женой в какой-нибудь санаторий там где и порыбачить можно)
Ну или можно скачать симулятор на компьютер) тоже развлечение)
avatar
Lankfrend, мля, симулятор. Вы еще скажите резиновую женщину прикупить.
avatar
Николай Скриган, ну а че) сидишь рыбу ловишь и торгуешь) я  вот в танки люблю играть)
avatar
Lankfrend, какую рыбу...? Какие танки...? 
avatar
Николай Скриган, да я все про игры
avatar
Николай Скриган, в любой непонятной ситуации ложитесь спать.
выбираешь последний ордер среди закрытых OrderSelect(), потом смотришь знак OrderProfit()
...
Не маловат ли спред поставили в тесте? Всего 10)
avatar

Kaiman, спасибо.

Что нужно сделать и как я примерно представляю. Вопрос  как это сделать в МТ4? Если торгуется один инструмент, я это делаю легко, по знаку изменения баланса.

Но мне нужно сделать для портфеля. Т.е. нужно выбрать не просто последний закрытый ордер, а последний закрытый по символу. Т.е. нужно двигаться с конца, пока не совпадет символ, а дальше смотреть знак прибыли.

Поскольку я не программист и с этими отборами еще не работал, это и вызывает некоторые вопросы… В частности не совсем ясен порядок перебора, с какого номера начинать. Ну и еще кое какие мелочи.

В общем проблема решаемая. Просто может есть ссылка на готовое решение...

avatar
Николай Скриган, в общем сами ответили уже)
Перебираете циклом ордера и ищете нужный символ if(Symbol()==«EURUSD» )

avatar
Kaiman, здесь проще...

if(OrderSymbol()!=Symbol()) continue;

avatar
Николай Скриган, ой да) Мой вариант вообще не пойдёт))
avatar
OrdersHistoryTotal() этим узнаёте сколько всего закрытых ордеров.И For -ом их перебираете
avatar
Kaiman, да хрен с ним со спредом. Я даже внимания не обратил. 
avatar
https://docs.mql4.com/ru/trading/ordershistorytotal


Альтернативный вариант: можно запоминать тикет каждого открываемого ордера, а потом их проверять.

Алексей Дорожинский, примерно так, как в ссылке. Спасибо.

Вот только последний закрытый это номер 0, или с другого конца надо считать?

Запоминать тикеты громоздко. И так по 100-200 ордеров в сутки. Через месяц советники только и будут делать, что перебирать ордера. Хотя здесь можно ввести блокировку перебора по отсутствию изменения баланса...

avatar
Николай Скриган, последний закрытый это вроде  OrdersHistoryTotal()-1
avatar
Kaiman, пасиб. Буду знать от чего отталкиваться.
Строчек в 6-7 может уложусь.
avatar
Николай Скриган, OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
выбор последнего закрытого ордера
avatar

Kaiman, торгуется портфель из множества инструментов, и нужно выбрать не просто последний закрытый ордер, а последний закрытый по данному конкретному инструменту. 

Если бы торговался один инструмент, то вопросов вообще не возникает, контролируешь баланс счета и все.

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

avatar
Николай Скриган, я понял. Просто от чего отталкиваться написал)
avatar
Николай Скриган, Подозреваю что без альтернативного варианта не обойтись :))), если ничего не получится с OrdersHistoryTotal(), то пишите, покажу как сделать запоминание и проверку по закрытию (без особой нагрузки на систему)
Алексей Дорожинский, ок. :)
Тока я еще ничего не делал. Даже проснуться толком не успел…

P.S. А вообще-то, если у вас есть что предложить, то лучше ждать, пока у меня получится/не получится, а сразу опубликовать. Если там нет бооооольших секретов. А если есть секреты, которые нужно хранить, то о них лучше вообще не упоминать.
avatar
Николай Скриган, 

Да какие там секреты ))), только так сходу, одной строкой, не объяснить.
Вот шаблон советника, может что-то прояснит. Только стиль программирования не стандартный, у меня большой монитор (46'') и поэтому я пишу длинные строки.И по мере возможностей стараюсь не использовать команду «if»(тормозит). Если что, всегда готов ответить на любые вопросы. Особенно на тему MQL )))


в тестере эта штука не работает 

https://mega.nz/#!QIQlSDRa!GtxymEwofN0aUpV_kqKaeiDcoT7dO123cB0qp0U5SsE

Алексей Дорожинский, спасибо.

Не рискнул грузить незнакомый файл с незнакомого сайта. После пары катастроф предохраняюсь со страшной силой. :)

avatar
Николай Скриган, моё дело предложить, ваше дело отказаться. 

for(i=OrdersHistoryTotal();i>0;i--)
{
OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()!=Symbol()) continue;
if(OrderProfit()>0) ................
}

типа такого)

avatar

Kaiman, пасиб. Вроде все так, цикл только нужно проверить...
Но буду завтра смотреть, сегодня мыслительные способности уже отключены.

В вашем варианте я бы сделал так (если не ошибаюсь):

for(i=OrdersHistoryTotal()-1;i>0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderSymbol()!=Symbol()) continue;
if(OrderProfit()>0) ................
}

avatar
Николай Скриган, ок) Отпишись, чего нибудь получилось ли))
avatar
Kaiman, ок, напишу.
avatar
Николай Скриган, я давно хотел спросить, а что-за контора рибейты отдаёт? можно в личку
avatar
дядя Вова, 
avatar
Николай Скриган, спс
avatar
Николай Скриган, по Альфе написано что рибейт только для счетов, открытых через МОФТ.
avatar
дядя Вова, да. Вы на сайт МОФТ сходите, там все написано. Откройте новый счет, если что… Или старый перепишите на партнерскую ссылку МОФТ
avatar
Николай Скриган, я там и читаю.спасибо
avatar
«качество моделирования 25%»
плюс в МТ4 всегда левые котировки
avatar
Max Xaser, МТ тестер вобще предназначен для проверки чисто технической части (открывает-не открывает и т.п.)
Max Xaser, а что вы хотите при тестировании на М1, для работы на котором и предназначен советник. По другому не бывает в принципе. Только 25% или n/a если по ценам открытия.
Хотя может я и ошибаюсь. Впрочем, я никогда результатам тестов не придавал особого значения. Для меня главное — это проверка работоспособности в принципе и вылавливание принципиальных косяков.
Хреновая стратегия на любом тестере даст хреновый результат. С ней и возиться дальше особого смысла нет. А если результат неплох, то можно и поковыряться…
avatar
 интересно, в прошлые выходные Вы сказали что «раздачей» купонов займётесь в понедельник, потом было некогда, а теперь их уже разобрали? так привлекаете внимание?
Александр НеПушкин, ну почему же. В понедельник и раздавал. Аж вспотел…
avatar
Николай Скриган, 

//-- Расчет лота по мартингейлу -------------------------------------------------
case 3:
double k=1; // Переменная, от значения которой зависит, будет ли удваиваться следующий лот
if (OrdersHistoryTotal()==0) return(Lots); // Если история пустая, торгуем стартовым лотом
for (int i=OrdersHistoryTotal()-1;i>-1;i--) // Перебор всех закрытых позиций и удаленных ордеров
{
bool OrderSelec=OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); // Выбираем ордер
if(OrderCloseTime()!=0 && OrderProfit()>0) bool mart=true; // Если выбранный ордер — закрыт с прибылью, следующая строка удвоения лота не выполняется, просто переходим к следующей итерации...
if(OrderCloseTime()!=0 && OrderProfit()<0 && !mart) k*=KotMMMetod3; // Если выбранный ордер — закрыт с убытком, удваиваем коэффициент мартингейла
}
double MartinLot=k*Lots; // Рассчитываем лот по мартингейлу, размер k зависит от количества идущих подряд убыточных сделок
if(MartinLot>MarketInfo(Symbol(),MODE_MAXLOT)) {Alert(«Рассчитанный лот больше максимально допустимого!»); return(0.01);} // Если рассчитанный лот больше допустимого, выходим
if(MartinLot*MarketInfo(Symbol(),MODE_MARGINREQUIRED)>AccountFreeMargin()) {Alert(«Размер свободных средств не позволяет открыть позицию с рассчитанным лотом!»); return(0.01);}// Если размер свободных средств не позволяет открыть позицию с рассчитанным лотом, выходим
retlot=MartinLot;
break;
//-------------------------------------------------------------------------------
default:
retlot=Lots;
}
if(retlot<1.0/MathPow(10,LotsDigits))retlot=1.0/MathPow(10,LotsDigits) ;
retlot=NormalizeDouble(retlot,LotsDigits);

if(AccountFreeMarginCheck(Symbol(),aTradeType,retlot)<=0){
return(-1);
}
if(GetLastError()==134){
return(-2);
}

return(retlot);
}

avatar

Sergii Onyshchenko (osa), посмотрю. Спасибо.

У меня не мартингейл, но ордера все рано нужно анализировать.

avatar

Sergii Onyshchenko (osa), присмотрелся. 

Похоже как прототип для модификации в самый раз. Завтра начну адаптировать...

avatar
Николай Скриган, «Александр, давайте завтра. Я уже запутался, какие из них активные, какие нет. То, что завтра останется в списке, начну рассылать по новой.».Это Ваш ответ 11.02.2016 г., на мою просьбу. Буду знать, что сказать- не означет сделать.
Александр НеПушкин, все, кто прислал запрос в понедельник, получили ключи.
Если вы обиделись, что я не вспомнил про вас сам и не выслал ключ, извините. Бывает из-за дел.
avatar
Николай Скриган, я не безвозмездно!

Александр НеПушкин, это лишнее.

Раздавая купоны я не претендую на какие-либо ответные шаги и движения.

avatar
Николай Скриган, обратите внимание, что эмитирует ваш белорусский банк и по-всей видимости скоро будут зар.платы ими выдавать! Спасибо.
Подааайте купончик на бесплатный батончик!)  В личку не могу писать)
avatar
 Если нужны будут еще, обращайтесь
avatar

теги блога neophyte

....все тэги



UPDONW
Новый дизайн