Скачать MetaTrader 5

NormalizeDouble(Bid,Digits) ???

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114280
Forex Trader  
Столкнулся с такого типа записями в журнале тестирования
2005.01.18 01:58  Market_Order2 EURUSD,M1: invalid price 1.30305004 for OrderSend function

После модификации OrderSend введением NormalizeDouble(Bid,Digits)

OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3,Ask+dStopLoss,Bid-dTakeProfit,"",MAGICMA,0,Red);

эффект исчезает. Чтобы исключить дефект истории, переписал её с использованием такого блока

    FileWriteInteger(HstHandle, HstCurr, LONG_VALUE);
    FileWriteDouble(HstHandle, NormalizeDouble(Open[i],Digits), DOUBLE_VALUE);
    FileWriteDouble(HstHandle, NormalizeDouble(Low[i],Digits), DOUBLE_VALUE);
    FileWriteDouble(HstHandle, NormalizeDouble(High[i],Digits), DOUBLE_VALUE);
    FileWriteDouble(HstHandle, NormalizeDouble(Close[i],Digits), DOUBLE_VALUE);
    FileWriteDouble(HstHandle, Volume[i], DOUBLE_VALUE);

Не помогло. Версия МТ - от 23 января 2006.

Forex Trader
114280
Forex Trader  
P.S. Как бы очевидно, но всё же добавлю, для полноты, первоначальный OrderSend
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+dStopLoss,Bid-dTakeProfit,"",MAGICMA,0,Red);

И ещё деталь: тестирование проводилось по ценам открытия.

Forex Trader
114280
Forex Trader  
Вы не могли бы прислать на stringo at metaquotes dot ru полученный таким образом файл? Хотелось бы его поанализировать.
Forex Trader
114280
Forex Trader  
Вы не могли бы прислать на stringo at metaquotes dot ru полученный таким образом файл? Хотелось бы его поанализировать.
Имеется в виду файл истории? Смогу только вечером выслать.
Forex Trader
114280
Forex Trader  
Проверил ещё раз. Всё таки нормализация истории помогает. Прошу прощения за ложную тревогу. Видимо вчера я преждевремнно снял галочку "пересчитать". Вероятно, дефективный файл истории интереса не представляет, но выслать всё равно могу :) (архив - 194 Кб).
Пожалуй добавлю ещё полный код скрипта, нормализующего историю
//+------------------------------------------------------------------+
//|                                             NormalizeHistory.mq4 |
//|                                         Copyright © 2006, Candid |
//|                                                   likh@yandex.ru |
//+------------------------------------------------------------------+

// Копирует файл истории, нормализуя данные (на всякий случай)

#property copyright "Copyright © 2006, Candid"
#property link      "likh@yandex.ru"
#property show_inputs

#include <stdlib.mqh>


datetime HstCurr;
int HstHandle=-1;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()  {
   int    version=400;
   string c_copyright;
   string c_symbol=Symbol();
   int    i_period=Period();
   int    i_digits=Digits;
   int    i_unused[13];
   int    i; 
//----  
  HstHandle=FileOpenHistory(c_symbol+i_period+"_Normalized"+".hst", FILE_BIN|FILE_WRITE);
  if(HstHandle < 0) {
    Print(" .hst файл открыть не удалось, последняя ошибка ", GetLastError());
    return(-1);
  }
// Пишем заголовок hst файла
  c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
  FileWriteInteger(HstHandle, version, LONG_VALUE);
  FileWriteString(HstHandle, c_copyright, 64);
  FileWriteString(HstHandle, c_symbol, 12);
  FileWriteInteger(HstHandle, i_period, LONG_VALUE);
  FileWriteInteger(HstHandle, i_digits, LONG_VALUE);
  FileWriteInteger(HstHandle, 0, LONG_VALUE);       //timesign
  FileWriteInteger(HstHandle, 0, LONG_VALUE);       //last_sync
  FileWriteArray(HstHandle, i_unused, 0, 13);

// Начинаем заполнять
  i = Bars;
  while (i > 0) {
    i--;
    HstCurr = Time[i];
    FileWriteInteger(HstHandle, HstCurr, LONG_VALUE);
    FileWriteDouble(HstHandle, NormalizeDouble(Open[i],Digits), DOUBLE_VALUE);
    FileWriteDouble(HstHandle, NormalizeDouble(Low[i],Digits), DOUBLE_VALUE);
    FileWriteDouble(HstHandle, NormalizeDouble(High[i],Digits), DOUBLE_VALUE);
    FileWriteDouble(HstHandle, NormalizeDouble(Close[i],Digits), DOUBLE_VALUE);
    FileWriteDouble(HstHandle, Volume[i], DOUBLE_VALUE);
  }
//----
  FileClose(HstHandle);
  return(0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий