
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Конец модуля жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxххххххххххххx
//====================================================================================================================
//--------------------------------------------------------------------------------------------------------------------
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
//   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
/*
/*
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Доделки - недоделки жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//--------------------------------------------------------------------------------------------------------------------
Поправить все сообщения, кот. " в соотв. с предопределением советника".
//--------------------------------------------------------------------------------------------------------------------
Сделать сообщение "Нет ордеров" при попытке установить значок когда нет ордеров.
//--------------------------------------------------------------------------------------------------------------------
Сделать проверку Tjaga, чтоб не меньше допусков
//--------------------------------------------------------------------------------------------------------------------
Упорядочить Редро (1 раз в конце и то по надобности)
//--------------------------------------------------------------------------------------------------------------------
В deinit() стирание всех линий = Чистильщик
//--------------------------------------------------------------------------------------------------------------------
В цикле объекты удалять нельзя!!!!!
//--------------------------------------------------------------------------------------------------------------------
Ограничение по количеству горизонтальных линий - от 1 до 50
//--------------------------------------------------------------------------------------------------------------------
Ограгичение по количеству ордеров: не более 5 однотипных ордеров
( т.е. всего в терминале может быть 5 х 6типов = 30 ордеров).
//--------------------------------------------------------------------------------------------------------------------
подкачка исторических данных.
//--------------------------------------------------------------------------------------------------------------------
отследить везде правильность проверки старого массива ордеров. В AG_Hud_ins_scr.mq4 правильно
//--------------------------------------------------------------------------------------------------------------------
Изменение размера окна = прекращение работы скрипта (задержка?)
//--------------------------------------------------------------------------------------------------------------------
Вычистить всё, что касается глоб. перем. на основе тек. курсов, т.к. можно взять в самом скрипте
//--------------------------------------------------------------------------------------------------------------------
Вычистить строку везде кроме AG_Mess_graf_scr (употреблялось доAG_Rev_BL_OP_scr):
            Time_Mess=GetTickCount();                                      // Запоминаем время публикации сообщения
//--------------------------------------------------------------------------------------------------------------------
http://www.metaquotes.ru/forum/4625/          Рисует тиковый график для пары из основного чарта.
http://www.metaquotes.ru/forum/6109/
//--------------------------------------------------------------------------------------------------------------------
Вычистить Мессадж
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------
http://www.metaquotes.ru/forum/6111/page2
ну вот кусок

	for (i = 0; i < 3; i++)
	  {
	  if (!OrderClose(ticket, lots, Bid, 0))
		  {
		  Print("ERR: BUY #", GetLastError());
		  Sleep(2000);
		  RefreshRates();
		  } 
	  else break;
	  }

если пришёл requote, то зачем ждать 2 секунды? либо ждать дольше, секунд 10-20 
в надежде на то, что рынок "утихнет", либо совсем не ждать (но это чревато, так как неизвестно,
 кто сгенерировал реквот, клиентский терминал, сервер или брокер) 
 
Renat 18.11.05 11:15 
Во первых, корректность куска кода, не означает корректности эксперта. 
Я об этом уже писал в соседних аналогичных ветках обсуждений. 
Где гарантия отсутствия устаревания цен до момента вызова этого куска кода? Нужно приводить абсолютно полный код.
Во вторых, код явно некорректный. Это скрипт-убийца. Где проверки на результат операций по кодам возврата? 
На каком основании идут повторы операций?
Похоже, из-за такого кода мы будем еще больше ужесточать контроль торговых операций. 
//--------------------------------------------------------------------------------------------------------------------
Либо я чего-то не понимаю, либо всё-таки приведённый ниже кусок кода зависать не должен:

         while(OrdersTotal()> 0) 
         {
            OrderSelect(0, SELECT_BY_POS);
            if(OrderType() == OP_BUY)
            {
               OrderClose(OrderTicket(), OrderLots(), Bid, 3);
            } else {
               OrderClose(OrderTicket(), OrderLots(), Ask, 3);
            }
         }
На этом месте эксперт виснет наглухо. А почему? Разве после успешного закрытия ордера, 
функция OrdersTotal() не меняет значение? Должна вроде... 
Ордер выбираю всегда первый, т.к. по-любому доберусь до конца, закрывая их с начала... Вот. Что скажете? 

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

 Renat 22.11.05 21:10 

Еще один скрипт-убийца.
Почитайте, пожалуйста, форум - все это многократно объяснялось:
1) все OrderSelect должны проверяться
2) где проверки на результат OrderClose? Запустите скрипт в выходные и навечно завесите код
3) где учет/проверка на устаревание цен? где RefreshRates?
4) вообще о брокере думали? что на его стороне будет?
Думаю, придется нам принудительно дисквалифицировать/отключать скрипты за такие попытки трейдов. 

Необходимо писать максимально защищенный код, а не игнорировать проверки с подходом:
- мне повезет! 
- реквота не дадут!
- на выходные не попаду!
- отложенных ордеров быть не может, я же только BUY и SELL делаю!
- вообще, все должно работать по моей схеме, а требования разработчиков не интересует!
- а на брокера мне вообще наплевать, меня не волнует частота запросов - пусть отрабатывает!

//--------------------------------------------------------------------------------------------------------------------
Slawa 29.11.05 11:45 
недавно тут уже говорили, что если стоит параметр SELECT_BY_TICKET, то следующий параметр просто игнорируется. 
//--------------------------------------------------------------------------------------------------------------------
if (OrdersTotal()<1)
{
for (i=1;i<5;i++)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask+100*Point,Ask-100*Point,0,Black);
//вместо != надо == проверка что ошибок нет
if(GetLastError()==ERR_NO_MQLERROR) return(0); 
}
}
Это проверка на открытие ордера... дается 5 попыток
 
 Renat 01.12.05 09:08 

1) где проверка на возвращаемый результат функции OrderSend? это надо делать до GetLastError
2) где корректный OrderSelect?
3) где задержки Sleep после неудачной отработки ордера?
4) где обновление рыночных данных после Sleep через RefreshRates? 
//--------------------------------------------------------------------------------------------------------------------
Да и брокеры какие-то неправильные значения выдают по этим параметрам.
 Например в Альпари MODE_MINLOT=0, MODE_LOTSTEP=10. Вроде бы должно быть 0.1 и 0.1. 
 В Neuimex соответсвенно указаны 1 и 1. А по моему пониманию дожно быть 0.1 и 0.01.
 
Renat 01.12.05 15:56 
Все верно. Брокеры выдают такие значения, которые сами выставили.
Если стоит minlot=1, означает, что торговать можно не меньше одного лота. 
//--------------------------------------------------------------------------------------------------------------------
    RefreshRates();в скрипте на бесконечном цмкле работает?
//--------------------------------------------------------------------------------------------------------------------
Alexandr 07.11.05 19:41 http://www.metaquotes.ru/forum/6111/

Процедура проверки:

Клиентский терминал:
1. Проверка на клиенте наличия цен клиента в ценовом потоке. В случае отсутствия - немедленный возврат
 с сообщением "Invalid prices"

Сервер:

2. Проверка переданных клиентом цен на допустимое отклонение (определяется владельцем сервера) 
от текущих рыночных цен.
Если цена удовлетворяет условию - к п. 3
Если отклонение больше допустимого:

- если отклонение текущей рыночной цены от цены запрашиваемой клиентом меньше-равно чем Slippage - к п.3

- если отклонение текущей рыночной цены от цены запрашиваемой клиентом 
больше чем Slippage - клиенту возвращается реквот с текущими рыночными ценами.

3. Проверка переданных клиентом цен на наличие в ценовом потоке.
 В случае отсутствия - клиенту возвращается реквот с текущими рыночными ценами.

4. Запрос передаётся дилеру. В случае, если дилер реквотирует заявку клиента по новой
цене проверяется: 

- если отклонение цены выданной дилером от цены запрашиваемой клиентом меньше-равно чем Slippage -
ордер принимается к обработке;

- если отклонение цены выданной дилером от цены запрашиваемой клиентом больше чем Slippage - 
клиенту возвращается реквот с ценами дилера;

fuerMT 09.11.05 11:46 .............................................

Чем может быть вызвана неоднократная ошибка 138, если Slippage = 100?
Из объяснения я понял, что в этом случае ордер должен ВСЕГДА исполняться.

И еще один вопрос:
я понял, что проверка на попадание внутрь Slippage производится на СЕРВЕРЕ. Видит ли это брокер. 
Если нет, то как реализована защита, ведь сервер принадлежит брокеру? 

 Alexandr 09.11.05 11:56 ...............................................

Вопрос 1:
- См. п. 1 и п. 3 - посланная цена либо вообще отсутствовала когда либо в ценовом потоке,
 либо она слишком устарела. При данной проверке, как следует из описания, Slippage ни как не влияет.

Вопрос 2:
Дилер не имеет возможности определять Slippage клиентского запроса - ни прямыми ни косвенными 
методами - для этого просто отсутствуют технические средства - это было принципиальное решение при создании системы,
 которое мы не собираемся изменять 
//--------------------------------------------------------------------------------------------------------------------
чтоб содержимое файла не стиралось:

FileOpen ( file_name, FILE_READ | FILE_WRITE, " " );
FileSeek ( file_handle, 0, SEEK_END );
//--------------------------------------------------------------------------------------------------------------------
Registr 18.12.05 07:18           http://www.metaquotes.ru/forum/6453/
Здравствуйте. Написал простенькую dll-ку на делфи:
Renat 18.12.05 17:39 
В MQL4 только сишные строки. Других не будет. 
//--------------------------------------------------------------------------------------------------------------------
KimIV 19.12.05 12:19 http://www.metaquotes.ru/forum/6457/

Всем большое спасибо за участие. Сделал, как посоветовал komposter. Отдельный респект! 
Модуль внедряется в любой советник добавлением всего двух строк. 
На выходе получается файл с информацией о прибыли за выбранный период (месяц, квартал, год)
 и балансе по торговому счёту.
//--------------------------------------------------------------------------------------------------------------------
формат fxt опубликован http://www.metaquotes.ru/forum/6321/
, то я осилю :) 
 ответить

 Renat 20.12.05 19:26 
Сначала идет заголовок:
//--------------------------------------------------------------------------------------------------------------------
Slawa 21.12.05 11:38 
мы добавляем такое ограничение в следующем билде. 
но оно ненастраиваемое - логи тестера и экспертов будут жить не больше 5 дней.
 логи терминала необходимо удалять вручную 
//--------------------------------------------------------------------------------------------------------------------
Martengail  http://www.metaquotes.ru/forum/6496/ 
СК: выложен полный код советника.
//--------------------------------------------------------------------------------------------------------------------
Конструкция для OrderSend()   http://www.metaquotes.ru/forum/6497/  Candid 26.12.05 16:27 
//--------------------------------------------------------------------------------------------------------------------
Создание скриншотов в MetaTrader штатными средствами http://www.metaquotes.ru/knowledge_base/screenshots
//--------------------------------------------------------------------------------------------------------------------
Вопросы по трейдингу и торговым методам задавайте на специализированных форумах, например,
 на сайтах forex.kbpauk.ru www.viac.ru www.alpari-idc.ru
//--------------------------------------------------------------------------------------------------------------------
Barlog 10.01.06 09:44 

Есть научные методы сокращения числа итераций при оптимизации - генетические алгоритмы, метод градиентного спуска 
и т.д. Все они достаточно проработанные и имеется куча примеров, библиотек для их реализаций.
//--------------------------------------------------------------------------------------------------------------------
Правила:
1. Подтяжка отл. орд. (ручная и автоматическая) производится синхронно с его х-ками, 
   если иное не указано специально, например, курс ТР.
  
2. Ставим всякие подтяжки. Если БЛИЖАЙШАЯ линия не может ТАК тянуться (например, ТР отл орд), 
   то - "брыньк" юзеру, т.е. запрет на использование, пусть правильно ставит стрелки.

//--------------------------------------------------------------------------------------------------------------------
Ренат:
Неправильно вручную прописанный дата-центр - это серьезнейшее зло.
Не рекомендую легкомысленно относиться к этому. 
//--------------------------------------------------------------------------------------------------------------------

