Навигатор по форуму и ответы на часто задаваемые вопросы. Настоятельно Рекомендуется к Прочтению! - страница 5

 


Как импортировать данных из Excel в МТ4?


sanyooooook: Скачиваем библиотеку от сюда (описание библиотеки). И пример скрипта Excel_to_MT4.mq4.

1. Устанавливаем библиотеку в папку "Каталог терминала\experts\libraries"
2. Запускаем скрипт разрешив использование dll.
3. Открываем оффлайн график следующего формата "!Eqv+Имя символа+,+M+Значение переменно TicksInBar"
4. Должен открыться Excel.

По умолчанию стоит путь D:\Книга1.xlsx, и желательно что бы файл уже был создан.
Всегда берутся данные только с активного листа в Excel!
Скрипт дописывает данные в конец графика если оффлайн график уже существует
.

Более подробно здесь

 
Как правильно открыть .csv в Excel 2010

Zhunko: Есть разные варианты решения.

1. Переименовать в .csv в .txt, тогда Excel должен выдать стандарное меню с запросом выбора разделителя. Какой-то нелогичный подход, имхо
2. Заменить все ‘,’ в файле на ‘;’ – разделитель для европейских языков. Круто, но я не хочу менять исходный файл и париться с игнорированием символов «;», которые у меня там как текст
3. Поменять языковые настройки системы. Вообще какая-то глупость
4. Добавить первой строчкой sep=, . Просто и изящно=)

Собственно, мой путь – решение №4.

Открываем в любом текстовом редакторе ваш .csv файл и дописываем первой строчкой sep=,
Все. Excel 2010 теперь снова знает разделитель в виде запятой.
 
Как остановить тестер с клавиатуры (вариант №2)?

FAQ: пауза в тестере делается легко, надо только зациклить советник.

подключайте user32.dll и в самом начале старта вписывайте такую строку :

while(GetAsyncKeyState(16)){Sleep(500);}

теперь при нажатии на кнопку шифт ваш сов будет висеть пока не отпустите, и соответственно тормозить тестер.

можно сделать работу через статический флаг:

   static bool prePause=false;
   while(prePause){
      if(GetAsyncKeyState(18)){prePause=false;}
      Sleep(500);
   }
   if(GetAsyncKeyState(17)){prePause=true;}

Теперь при нажатии на контрол эксп будет тормозиться, а при нажатии на альт - запускаться снова

И не забудьте прикрепить импорт в начале

#import "user32.dll"
bool GetAsyncKeyState(int nVirtKey);
#import
 
Как узнать время терминала, например, EET, GMT или какое-то другое?

HIDDEN: Без WinAPI эту задачу не решить.
#import "kernel32.dll"
int GetTimeZoneInformation(int& TZInfoArray[]);
#import


int start(){
   int TZInfoArray[43]; int dst = GetTimeZoneInformation(TZInfoArray);
//----
   int TimeZone = TZInfoArray[0];          // часовой пояс на основе локальных данных DLL (разница с GMT)
   int SummerTime = dst-1;                 // переход на зимнее/летнее время: 1 = лето, 0 = зима
 
   datetime Broker = TimeCurrent();        // переменная времени BROKER
   Print("Brokers = ",TimeToStr(Broker,TIME_DATE|TIME_SECONDS));
   datetime Local = TimeLocal();           // переменная времени LOCAL
   Print("Local = ",TimeToStr(Local,TIME_DATE|TIME_SECONDS));
   datetime GMT = Local + (TimeZone * 60);   // переменная времени GMT
   Print("GMT = ",TimeToStr(GMT,TIME_DATE|TIME_SECONDS));
//----
   return(0);
  }

В 2-х словах, если локальное время на компе выбрано не правильно, т.е. не та зона, то естественно работать будет не правильно. Как в винде синхронизировать время, выставить свою тайм зону написано в яшке и гугле.


sergeev: Функция ShiftGMT для определения GMT смещения в текущем часовом поясе компьютера.

//------------------------------------------------------------------ ShiftGMT
#import "kernel32.dll"
int  GetTimeZoneInformation(int& TZInfoArray[]);
#import

int ShiftGMT()
{
    int TZInfoArray[43], gmt_shift=0, ret=GetTimeZoneInformation(TZInfoArray);
    if(ret!=0) gmt_shift=TZInfoArray[0]; else if (ret==2) gmt_shift+=TZInfoArray[42];
    return(gmt_shift*60);
}
Переход на зимнее время осуществляется в последнее воскресенье октября (10 месяц)
(в 2010 году – 31 октября в 03:00 в Москве и в 04:00 в Киеве).
Переход на летнее время осуществляется в последнее воскресенье марта (3 месяц)
(в 2011 году – 27 марта в 02:00 в Москве и в 03:00 в Киеве).
 

-----------> Желающие дополнить данный раздел своим FAQ - пишите, пожалуйста, в эту ветку <-------------


 
 

Есть ли возможность отключить всплывающее окно логина и работать в оффлайне?


ALEX_SPB_RU: Да, зайдити в настройки и задайте несуществующий прокси и всё!

 
Как дать ссылку не на страничку, а на конкретный пост на форуме?

sergeev: Для этого надо в html коде требуемого поста найти тег <a name="XXXXXXX"> и добавить его в адрес этой же страницы

Посмотрим на примере.





1. Выделяем немного заголовка поста и смотрим исходный код этого фрагмента





2. В html коде находим нужный тег <a name="XXXXXX">



3. И добавляем этот номер со знаком '#' к адресу страницы




4. Получаем требуемую прямую ссылку на пост

https://forum.mql4.com/ru/40189/page21#648786

 
Подскажите, как используя PostMessageA в указанном графике поменять валютную пару?

sergeev:

В чарте МТ встроена возможность, при которой если нажать клавишу Enter, то внизу появляется строка для символа, таймфрейма и даты.
Если внести требуемые данные в эту строку, то чарт автоматически перейдет на указанный в ней символ, таймфрейм и дату.

Нижний пример демонстрирует заполнение этой строки средствами WinAPI

//------------------------------------------------------------------
void SetChart(string smb, int tf)
{
  int hwnd=WindowHandle(Symbol(), Period()); // текущий график
  PostMessageA(hwnd, WM_KEYDOWN, VK_RETURN, 0); Sleep(PAUSE); // ждем инициализацию строки навигации
  hwnd=GetDlgItem(hwnd, 0x45A); // получили окно строки
  PostMessageA(hwnd, WM_KEYDOWN, VK_ESCAPE, 0); // выходим из редактировани строки навигации
  SetWindowTextA(hwnd, smb+" "+tf); PostMessageA(hwnd, WM_KEYDOWN, VK_RETURN, 0);
}
 
Процессоры удовлетворяющие минимальным требованиям для запуска МетаТрейдер 4
Процессоры с поддержкой SSE3