Новая версия MetaTrader 4 Client Terminal 387 и MetaTrader 4 Data Center build 387 - страница 15

 
joo:

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

Как раз в этом случае всё абсолютно прозрачно - двое форумчан высказали свою крайне негативную позицию относительно сообщения nen, после чего последовал бан, а Renat доходчиво объяснил за что бан.

+100
 
joo:

.... после чего последовал бан, а Renat доходчиво объяснил за что бан.

я всего навсего попросил сделать две вещи:

1) информировать посетителя профиля форумчанина что этот самый форумчанин забанен.

2) при выписке бана - указывать причину (не после доходчиво объяснять, а именно во время объявления бана).

это просто технические вещи, которые не имеют никакого ни к морали, ни к воспитанию, ни к чему либо еще.

еще рискну предложить правильный вариант бана: пользователю нужно запрещать не вход на форум а только создание новых тем и сообщений. чтобы забаненный по крайней мере мог задать вопрос (в личке) и не мусорил список пользователей новыми никами.

повторюсь еще раз: никого ничему не учу и не заставляю ничего делать и/или менять свои убеждения и всякое такое. это чисто техническое/технологическое просьба/предложение по улучшению работы движка форума.

 
f.t.:

я всего навсего попросил сделать две вещи:

1) информировать посетителя профиля форумчанина что этот самый форумчанин забанен.

2) при выписке бана - указывать причину (не после доходчиво объяснять, а именно во время объявления бана).

это просто технические вещи, которые не имеют никакого ни к морали, ни к воспитанию, ни к чему либо еще.

еще рискну предложить правильный вариант бана: пользователю нужно запрещать не вход на форум а только создание новых тем и сообщений. чтобы забаненный по крайней мере мог задать вопрос (в личке) и не мусорил список пользователей новыми никами.

повторюсь еще раз: никого ничему не учу и не заставляю ничего делать и/или менять свои убеждения и всякое такое. это чисто техническое/технологическое просьба/предложение по улучшению работы движка форума.

Против тобой сказанного я лично ничего не имею против, а наоборот - поддерживаю. Просто у тебя пример с nen был неудачный и я отпостил с намеком именно на это.
 
ANG3110:

Хорошо, я посмотрю статью, на которую Вы ссылаетесь.

Про недокачанные данные... Сейчас за давностью времен я не смогу привести логи. Но выглядело это примерно так.

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

Другой случай. Был оставлен советник, и в его алгоритме был расчет канала, нечто похожее на Боллинжер, но требующий много баров, поскольку там был алгоритм адаптации. Момента, начала торговли я не видел, а увидел минут через 20. Оказалось, что отклонения от адаптироанной средней не посчитались, и канал схлопнулся в линию, как бы лег на среднюю. Советник открывал и закрывал одну позицию за другой и на 0.2-0.3 лота за 20 минут потерял ок. 4500$, при совершенно выигрышном рынке. Такое могло произойти, если было или очень мало данных или что-то не хватило для конструкции котрую я приводил выше.

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

На мой взгляд

советник требует ЧЕТКО! наличия данных ( как правило любой )

Ибо все ошибки делятся на ошибки в коде и ошибки в данных!

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

и их корректности перед их использованием!


например: элементарно прежде чем делить нужно проверить а не на ноль ли мы пытаемся делить?

это будет правильным тоном практически в любой ситуации, даже если вы уверены .. что переменная ... не может быть = 0

проверка ДАСТ 100% того что программа ТОЧНО не вылетит при делении! ИТАК ПРОВЕРЯТЬ ДАННЫЕ НАДО!




что бы избежать подобного!

советник четко должен знать какой объем баров ему необходим!

далее простой но эффективный алгоритм

от текущей работающей свечи на нужном таймфрейме или таймфреймах

пробежать на нужную глубину! с и смотреть есть ли пропущеные бары - это не сильно сложно

код приводить не буду ... тут собрались те кто такой код напишут легко!


далее советник просто не отрывает или не закрывает а КРИЧИТ!!! что нет ПОЛНОЙ истории

вы !!! принимаете это во внимание - принимаете меры по заполнению пропущеных баров!

и только после этого разрешаете ему торговать!

--

ваша беда в том, что в вашем алгоритме нет такого контроля!

добавьте! ведь это не сложно, чем терять 4500$ ...

--

Для тех, кто такой код не может написать, тут такой код напишут за 100-200$

это же меньше чем 4500$!

 
YuraZ:

от текущей работающей свечи на нужном таймфрейме или таймфреймах

пробежать на нужную глубину! с и смотреть есть ли пропущеные бары - это не сильно сложно

Спасибо Юра за подсказску.

Но как быть, если теминал только открыл, и нулевой бар еще старый - допустим предыдущего дня. От него можно конечно пробежаться на определенную глубину, считая пропуски баров, но это же будет ошибка. Откуда советник знает последний ли это на данный момент бар или нет? Я ранее писал, что в принципе можно сравнивать TimeLocal() и TimeCurrent(), учтя разницу во времени и добавив маленькую дельту разброса, потому что иногда бывает нет котировок в течении 3-5-ти минут, на CAD-овых парах особенно часто, ну а уж больше навернеое можно считать ошибкой. И возможно это достаточно сделать при ините и при фиксировании пропусков баров уже далее, например при прерывании связи на несколько минут, а на каждом баре наверное пересчитывать и не нужно, а то будет долго считать. У меня в том советнике, что я писал о потерях, для статистической начальной адаптации требовалось до 20 тыс. баров. При таком количестве гонять циклы на каждом баре замучаешься, да и наверное в этом нет необходимости. Конечно это не лучший способ и зависящий от комьютерных часов еще в добавок. Может можно придумать что-то получше? Хотя как я в последнне время смотрел, если сработала функция IsConected(), то нулевой бар, обычно появляется почти сразу.

 
ANG3110:

Спасибо Юра за подсказску.

Но как быть, если теминал только открыл, и нулевой бар еще старый - допустим предыдущего дня. От него можно конечно пробежаться на определенную глубину, считая пропуски баров, но это же будет ошибка. Откуда советник знает последний ли это на данный момент бар или нет? Я ранее писал, что в принципе можно сравнивать TimeLocal() и TimeCurrent(), учтя разницу во времени и добавив маленькую дельту разброса, потому что иногда бывает нет котировок в течении 3-5-ти минут, на CAD-овых парах особенно часто, ну а уж больше навернеое можно считать ошибкой. И возможно это достаточно сделать при ините и при фиксировании пропусков баров уже далее, например при прерывании связи на несколько минут, а на каждом баре наверное пересчитывать и не нужно, а то будет долго считать. У меня в том советнике, что я писал о потерях, для статистической начальной адаптации требовалось до 20 тыс. баров. При таком количестве гонять циклы на каждом баре замучаешься, да и наверное в этом нет необходимости. Конечно это не лучший способ и зависящий от комьютерных часов еще в добавок. Может можно придумать что-то получше? Хотя как я в последнне время смотрел, если сработала функция IsConected(), то нулевой бар, обычно появляется почти сразу.

Ну здесь мне кажется всё просто... процедура int start() вызывается только при новом тике, а это мне кажется 100% значит, что функция TimeCurrent() (возвращает последнее известное время сервера (время прихода последней котировки)) уже будет актуальной, независимо от наличия баров...

Ну дальше я думаю всё понятно...

 
Renat:

К сожалению, Вы не указали ни начальных данных, ни тестовых параметров, ни логов.

Кроме того, Вы ссылаетесь на библиотеки (DLL), которые не только требуют массы инсталляций, но и не работают из-за отсутствия дополнительных библиотек (это уже к автору библиотек, который забыл про дополнительные DLL файлы).

Обратитесь к автору этих библиотек за информацией.


Если бы Вы перешли по ссылке, указанной мной, то увидели бы, что там из входных параметров лишь один имеет значение и выставлен, как и сказано в описании: StopLoss=100..1 000 шаг 10; x=1..1 000 000 шаг 1. К тому же, я сказал, что предыдущий билд подобной ошибки не выдавал - соответственно, ошибка ваша. Собственно, работать-то работает все. Лишь выдает это странное сообщение. Так вот это у меня оно быть может только это сообщение выдает, а у кого-то вообще откажется работать из-за последствия этой ошибки.
 
ANG3110:

Спасибо Юра за подсказску.

Но как быть, если теминал только открыл, и нулевой бар еще старый - допустим предыдущего дня. От него можно конечно пробежаться на определенную глубину, считая пропуски баров, но это же будет ошибка. Откуда советник знает последний ли это на данный момент бар или нет? Я ранее писал, что в принципе можно сравнивать TimeLocal() и TimeCurrent(), учтя разницу во времени и добавив маленькую дельту разброса, потому что иногда бывает нет котировок в течении 3-5-ти минут, на CAD-овых парах особенно часто, ну а уж больше навернеое можно считать ошибкой. И возможно это достаточно сделать при ините и при фиксировании пропусков баров уже далее, например при прерывании связи на несколько минут, а на каждом баре наверное пересчитывать и не нужно, а то будет долго считать. У меня в том советнике, что я писал о потерях, для статистической начальной адаптации требовалось до 20 тыс. баров. При таком количестве гонять циклы на каждом баре замучаешься, да и наверное в этом нет необходимости. Конечно это не лучший способ и зависящий от комьютерных часов еще в добавок. Может можно придумать что-то получше? Хотя как я в последнне время смотрел, если сработала функция IsConected(), то нулевой бар, обычно появляется почти сразу.

Привет!


это тоже можно логически проверить!

для начала, получите несколько тиков и считайте время TimeCurrent() и если он отстоит далеко от баров то загружаем - правда нужно учесть еще выходные

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

( время старта понедельника и время завершения пятницы элементарно вычислить автоматически методом усреднения за большой период )

пример логики

// простой пример контроля истори, просто логика 
 
int ФЛАГпроверкиИСТОРИ =0; // 0-история не проверена или не загружена

void init()
{
    ФЛАГпроверкиИСТОРИ   =0; // ставим флаг
}


void start()
{
     // читаем историю на предмет пропущеных баров
    if ( ФЛАГпроверкиИСТОРИ   == 0)
    {
// проверяем а вся ли нужна история есть и если нет то она загружается
      // загружаем
       если загружена ФЛАГпроверкиИСТОРИ=1;
       return;
    }
}


 
Akkarin:

Если бы Вы перешли по ссылке, указанной мной, то увидели бы, что там из входных параметров лишь один имеет значение и выставлен, как и сказано в описании: StopLoss=100..1 000 шаг 10; x=1..1 000 000 шаг 1. К тому же, я сказал, что предыдущий билд подобной ошибки не выдавал - соответственно, ошибка ваша. Собственно, работать-то работает все. Лишь выдает это странное сообщение. Так вот это у меня оно быть может только это сообщение выдает, а у кого-то вообще откажется работать из-за последствия этой ошибки.


Я прилежно со всем разобрался, все вычитал, логику понял, но столкнулся именно с тем, что указал - недостаточно сторонней dll библиотеки, которую автор того библиотечного сета не выложил (хотя сделал даже инсталлер).

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

Причина обращения: