архив


Софт для трейдеров

Автор: admin

Дата публикации 2009-06-22

Последнее редактирование 2009-06-22

Средняя оценка 0.0

Общий рейтинг 0

зарегистрируйтесь, чтобы ставить оценки

Все статьи, опубликованные admin

Дополнений 0

Комментариев к дополнениям 0


Решение проблемы экспорта котировок в формате CSV из торгового терминала metatrader 4.0

Многие трейдеры пользуются программой MetaTrader. Один из наиболее злободневных вопросов, который встает перед пользователями – как экспортировать исторические данные по котировкам в текстовые форматы. В штатных средствах программы предусмотрена возможность экспорта вручную, выбирая каждый временной промежуток и опцию экспорта каждый раз, но при большом объеме валютных пар и других инструментов, с которыми имеет дело трейдер, это очень неудобно. Поэтому следует искать другие варианты.

 

Судя по тому количеству скриптов, написанных на языке MetaQuotesLanguage (далее MQL 4), которые гуляют по просторам Интернета, многих такой вопрос волнует. Но большая часть таких скриптов либо работает не работает вообще, либо, в лучшем случае, работает с кучей ошибок, чему дополнительным доказательством  служат и многочисленные нелестные отзывы на форумах. Есть возможность, предусмотренная разработчиками, экспортировать котировки через протокол DDE, но это касается данных в реальном времени, а не исторических данных. С историческими же данными все сложнее: разработчик не предусмотрел никакой автоматики.

 

Из всех способов, которые можно реализовать с учетом технических возможностей языка MQL 4, следующий, судя по всему, является самым простым и быстрым. По крайней мере, котировки истории при наличии нормального некоммутируемого доступа к Интернету загружаются в файлы за считанные секунды. Идея принадлежит неизвестной личности, представившейся как Sprrite&Lemon, связаться с ним можно по адресу wladimir447@yandex.ru. В исходном варианте скрипт работал с багами, поэтому пришлось его переделать, чтобы корректно выводил данные в файлы (у меня он оптимизирован одновременно под стандарт программ Excel и WealthLab).

 

Приспособление для экспорта котировок представляет собой пользовательский индикатор со следующим кодом:

 

//+------------------------------------------------------------------+

 

//|                  Copyright © 2005, FX Waves  :) Fixed by Roman Mamchyts

 

//+------------------------------------------------------------------+

 

#property copyright "Copyright © 2005, Sprrite&Lemon"

 

#property link      "wladimir447@yandex.ru"

 

#property indicator_chart_window

 

#property indicator_buffers 1

 

#property indicator_color1 Blue

 

//---- input parameters

 

int              Bar;

 

extern int       LastBar=0;

 

extern int       cnttik = 3 ;

 

double           ExtMapBuffer1[];

 

// ???????  ????  ?  ??  ?????? N-?  ??? ?????????  ???? ?????????

 

int tick = 0 ;

 

int init()

 

  {

 

 

 

 

 

//---- indicators

 

   SetIndexStyle(0,DRAW_LINE);

 

   SetIndexBuffer(0,ExtMapBuffer1);

 

//----

 

   return(0);

 

  }

 

//+------------------------------------------------------------------+

 

//| Custor indicator deinitialization function                       |

 

//+------------------------------------------------------------------+

 

int deinit()

 

  {

 

//----

 

   

 

//----

 

   return(0);

 

  }

 

//+------------------------------------------------------------------+

 

//| Custom indicator iteration function                              |

 

//+------------------------------------------------------------------+

 

int start()

 

  {

 

   string sName="",ss1=" ",ss2=" ";

 

   int file=0, NumBar=0, shift=0;

 

   int Ye=0,Mo=0,Da=0,Ho=0,Mi=0,Se=0,Ti=0;

 

   int    counted_bars=IndicatorCounted();

 

   

 

   //---- check for possible errors

 

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

 

   // ???????  ????   ;

 

    tick++;

 

    if  ( tick <= cnttik  )

 

      {

 

        Print(" Tick  =  ", tick);

 

        Comment( tick ,"/", cnttik ," |  " , Bars);

 

        // ????? ????  ! -  ?????????

 

        return(0) ;

 

       }

 

    else

 

    {

 

       tick =  0 ;

 

       // ??????? ??????????? ????

 

       //int rfile = FileOpen("sprrite.csv",FILE_CSV|FILE_WRITE,",");

 

       //FileWrite(rfile,"yes");

 

       //FileClose(rfile);

 

       

 

    }   

 

       

 

    //int  filesh = FileOpen("zag.csv",FILE_CSV|FILE_READ);

 

   // string sh = FileReadString(filesh);

 

  //  FileClose( filesh );

 

//----

 

 if ( 1 == 1)  

 

    {

 

     //  ???

 

     if (Period()==10080) sName="monthly"+"\\"+Symbol()+Period()+".csv";

 

     if (Period()==43200) sName="weekly"+"\\"+Symbol()+Period()+".csv";

 

     if (Period()==1440) sName="daily"+"\\"+Symbol()+Period()+".csv";

 

     if (Period()==240) sName="4_hour"+"\\"+Symbol()+Period()+".csv";

 

     if (Period()==60) sName="1_hour"+"\\"+Symbol()+Period()+".csv";

 

     if (Period()==30) sName="half_hour"+"\\"+Symbol()+Period()+".csv";

 

     if (Period()==15) sName="quarter_hour"+"\\"+Symbol()+Period()+".csv";

 

     if (Period()==5) sName="5_min"+"\\"+Symbol()+Period()+".csv";

 

     if (Period()==1) sName="1_min"+"\\"+Symbol()+Period()+".csv";

 

     // ??????? ??????????

 

     FileDelete(sName);

 

     file =FileOpen(sName,FILE_CSV|FILE_WRITE,"\t");

 

    // FileWrite(file,sh);

 

 

 

    shift=Bars+LastBar-1;

 

     while(shift>=0)

 

    

 

     {    

 

                Ti=Time[shift];

 

                Ye=TimeYear(Ti);

 

                Mo=TimeMonth(Ti);

 

                Da=TimeDay(Ti);

 

    

 

                Ho=TimeHour(Ti);

 

                Mi=TimeMinute(Ti);

 

                if ( Ho == 0 && Mi == 0  ) Mi = 1 ;

 

                Se=TimeSeconds(Ti);

 

                ss1=Ye;

 

                if (Mo<10) ss1=ss1+"."+"0"+Mo; else ss1=ss1+"."+Mo;

 

                if (Da<10) ss1=ss1+"."+"0"+Da; else ss1=ss1+"."+Da;

 

                if (Ho<10) ss2="0"+Ho; else ss2=Ho;

 

                if (Mi<10) ss2=ss2+":"+"0"+Mi; else ss2=ss2+":"+Mi;

 

            

 

       FileWrite(file,ss1,ss2,Open[shift],High[shift],Low[shift],Close[shift],Volume[shift]);

 

     shift--;

 

     }   

 

     Comment( "  Save of "+ss1+" "+ss2+" is ok" ,  "  === " , Bars);

 

     

 

     NumBar=counted_bars;   

 

     FileClose(file);  

 

     Print(" ????????  " , Bars);

 

   }

 

//----

 

   return(0);

 

  }

 

С этим кодом поступаем следующим образом: копируем его, вставляем в созданный новый скрипт в MetaEditor, сохраняем как пользовательский индикатор, чтобы запустить его, просто перетаскиваем из меню «Пользовательские индикаторы» в окно графика. Значения выбираем по умолчанию. Почти сразу же в папке программы, в подкаталоге Experts/Files появятся экспортированные файлы csv с сохраненной полной историей того графика, что открыт в программе. Обновляются файлы автоматически.

 

Для того, чтобы дополнить статью вы должны зарегистрироваться

Похожие публикации
в разделе “Софт для трейдеров”

2009-02-17 09:17

Автор: NEFtyan

Пособие по Excel-2007: Excel для трейдера.

Описывается методика написания в Excel-2007 формул для определения максимумов и минимумов обозначенных пользователем диапазонов

0.0

2009-06-22 09:33

Автор: admin

Решение проблемы экспорта котировок в формате CSV из торгового терминала metatrader 4.0

Советы по экспорту котировок в формате CSV из популярной программы Метатрейдер

0.0