TWS -> MT4

 

Мы используем данные из (trader work station TWS), поскольку существует множество инструментов недоступны в МТ4. Котировок записываются на 5секундных и 5 минутных интервалов в базе данных. Мы хотим, чтобы анализировать данные в МТ4 в реальном времени.

1. Как импортировать данные в MetaTrader 4?
2. Мы постарались представить данные в MT4 по графику офлаин HST (исторических) фаилов. Так график действительно зарежаються, но не обновляються текущо после добавления новых данных в них через скрипт или индикатор, закрепленным на этом графике, который постоянно дополняеть файла HST.

 
Попробуйте почитать статью Новый взгляд на эквиобъемные графики и посмотреть скрипт Конвертер периодов
 
alex1001111 писал(а) >>

Мы используем данные из (trader work station TWS), поскольку существует множество инструментов недоступны в МТ4. Котировок записываются на 5секундных и 5 минутных интервалов в базе данных. Мы хотим, чтобы анализировать данные в МТ4 в реальном времени.

1. Как импортировать данные в MetaTrader 4?
2. Мы постарались представить данные в MT4 по графику офлаин HST (исторических) фаилов. Так график действительно зарежаються, но не обновляються текущо после добавления новых данных в них через скрипт или индикатор, закрепленным на этом графике, который постоянно дополняеть файла HST.

1. Если делать в Real Time, то ничего не получится, так как Вы хотите подменить собой сервер MT4, формат передачи данных от которого для клиентского места неизвестен, да и трудозатраты явно не окупятся

2. Через hst наверное единственный работающий вариант перенести данные в MT4, но в off-line.

У TWS есть API, а у IB FIX протокол, зачем Вам еще что-то ?

А связка TWS->API->MT4->API->TWS несет в себе больше потенциальных ошибок, чем пользы.

 

Мое решение через через hst script

//+------------------------------------------------------------------+
//| UpdateOfflineChart.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/"

#include <WinUser32.mqh>

extern string _Symbol = "GBPUSD";
extern int _Period = 1;
extern int _Digits = 4;
extern int _Sleep = 50;

int iFile, iWindow, iMessage;
datetime dtLast = D'2004.01.01 00:00';
//+------------------------------------------------------------------+
//| Custom indicator iteration 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];

//---- indicators
Print(Symbol() + Period() + ".hst" + " iFile " + iFile);

iFile = FileOpenHistory(Symbol() + Period() + ".hst", FILE_BIN/* | FILE_READ*/ | FILE_WRITE);

Print(Symbol() + Period() + ".hst" + " iFile " + iFile);

if (iFile < 0) return(-1);

c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
FileWriteInteger(iFile, version, LONG_VALUE);
FileWriteString(iFile, c_copyright, 64);
FileWriteString(iFile, c_symbol, 12);
FileWriteInteger(iFile, i_period, LONG_VALUE);
FileWriteInteger(iFile, i_digits, LONG_VALUE);
FileWriteInteger(iFile, 0, LONG_VALUE); //timesign
FileWriteInteger(iFile, 0, LONG_VALUE); //last_sync
FileWriteArray(iFile, i_unused, 0, 13);

FileSeek(iFile, 0, SEEK_END);

while(true)
{
//Print(TimeCurrent() + " " + TimeToStr(dtLast) + " " + TimeToStr(iTime(_Symbol, PERIOD_M1, 1)));
if(TimeCurrent() > dtLast + 60)//iTime(_Symbol, PERIOD_M1, 1)
{
Print("c " + TimeToStr(TimeCurrent()) + " |;l " + TimeToStr(dtLast) + " |;t " + TimeToStr(iTime(_Symbol, PERIOD_M1, 1)) + " | " + iOpen(_Symbol, PERIOD_M1, 1) + " " + iOpen(_Symbol, PERIOD_M1, 1) + " " + iLow(_Symbol, PERIOD_M1, 1) + " " + iHigh(_Symbol, PERIOD_M1, 1) + " " + iClose(_Symbol, PERIOD_M1, 1));

dtLast = TimeCurrent();

FileWriteInteger(iFile, (iTime(_Symbol, PERIOD_M1, 1) / (_Period * 60)) * (_Period * 60), LONG_VALUE);
FileWriteDouble(iFile, iOpen(_Symbol, PERIOD_M1, 1), DOUBLE_VALUE);
FileWriteDouble(iFile, iLow(_Symbol, PERIOD_M1, 1), DOUBLE_VALUE);
FileWriteDouble(iFile, iHigh(_Symbol, PERIOD_M1, 1), DOUBLE_VALUE);
FileWriteDouble(iFile, iClose(_Symbol, PERIOD_M1, 1), DOUBLE_VALUE);
FileWriteDouble(iFile, iVolume(_Symbol, PERIOD_M1, 1), DOUBLE_VALUE);

FileFlush(iFile);

UpdateChartWindow();
}

Sleep(_Sleep);

}
//----
return(0);
}
//+------------------------------------------------------------------+
int UpdateChartWindow() {
if (iWindow == 0) iWindow = WindowHandle(Symbol(), Period());
if (iWindow != 0) {
if (IsDllsAllowed() == FALSE) {
Alert("Please allow DLL calls!");
return (-1);
}
if (PostMessageA(iWindow, WM_COMMAND, 33324, 0) == 0) iWindow = 0;
return (0);

}
return (-1);
}

 
alex1001111 писал(а) >>

Попробуйте альтернативное решение. Там и MQL4-код работать будет.

 

Амиброкер с ТВС через родной плагин хорошо работает.

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