Jump to content
Programmer

Общие вопросы по языку MQL

Recommended Posts

Programmer

To касса:

 

помогите пожалуйста вставить звуковой сигнал на бай и на селл с регулировкой количества повторений по нулевому бару в этот индикатор это моё первое знакомство с языком.не могу разобраться.

 

Немного терпения...

Делается это так:

 

//+------------------------------------------------------------------+
//|                                                   Lutor_stop.mq4 |
//|                                  [url]http://www.indic.ru[/url]  |
//|                       2006    |
//+------------------------------------------------------------------+
#property copyright "[url]http://www.indic.ru[/url]"
#property link      "[url]http://www.indic.ru[/url]"
#property indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Lime  // up
#property  indicator_color2  Red  // down
extern double KirPER=10;
[b]extern int    AlertCount = 5;[/b]
double cb,valuel,valueh,CurrentBar;
double Kir ,Hi, Lo, KirUp, KirDn,mode,cnt,cnt1,cur,kr,no;
double ExtMapBuffer1[]; //  up
double ExtMapBuffer2[]; //  down
int loopbegin;

[b]datetime lastbar = 0;
int      AlertCountTemp = 0;[/b]

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
 {
    IndicatorBuffers(2);   
//---- drawing settings

  SetIndexBuffer(0,ExtMapBuffer1);//bbMacd line
  SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);


  SetIndexBuffer(1,ExtMapBuffer2);//Upperband line
  SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);

 IndicatorShortName("Lutor ("+KirPER+"), "+valueh+","+valuel);
 SetIndexLabel(0,"Lutor Up");
 SetIndexLabel(1,"Lutor Down");

//---- indicators
//----
  return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
 {
     int limit;
  int counted_bars=IndicatorCounted();
//---- check for possible errors
  if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
  if(counted_bars>0) counted_bars--;

[b]   if(lastbar < Time[0])
  {
     AlertCountTemp = AlertCount;
     lastbar = Time[0];
  }[/b]

     loopbegin = Bars-1;
     for(int i = loopbegin; i >= 0; i--)
     {         
if (Kir<1)
{
Hi=Close[i];
Lo=Close[i];
Kir=1;
}

cur=(Close[i]);

if (cur > (Hi+KirPER * Point)) 
{
Kir=Kir+1;
Hi=cur;
Lo=cur-KirPER*Point;
KirUp=1;
KirDn=0;
kr=kr+1;
no=0;
}
if (cur < (Lo-KirPER*Point)) 
{
Lo=cur;
Hi=cur+KirPER*Point;
KirUp=0;
KirDn=1;
Kir=Kir+1;
no=no+1;
kr=0;
}
valueh=kr;
ExtMapBuffer1[i]=valueh;//XO up
if (valueh < 0)
{
ExtMapBuffer1[i] = 0;
} 
if (valueh > 0)
{
ExtMapBuffer1[i] = 1;
[b]if(i==0 && AlertCountTemp > 0)
  {Alert("BUY SIGNAL"); AlertCountTemp --;}[/b]
} 
valuel=0-no;
ExtMapBuffer2[i]=valuel;// XO down
if (valuel > 0)
{
ExtMapBuffer2[i] = 0;
} 
if (valuel < 0)
{
ExtMapBuffer2[i] = -1;
[b]if(i==0 && AlertCountTemp > 0)
  {Alert("SELL SIGNAL"); AlertCountTemp --;}[/b]
} 


}

//----
  return(0);
 }
//+------------------------------------------------------------------+

Platinum_stop v2.0.mq4

Share this post


Link to post
Share on other sites
woldemar

Здравствуйте, господа!

Может ктонибудь может пролить свет на следующий вопрос(пробовал связаться с тех. поддержкой Альпари, но меня оттуда отправили на форум).

В торговой платформе у меня установлен эксперт , до недавнего времени эксперт "светился" , но потом вдруг, "светится" перестал (стал серым , но сигналы продолжает подавать), какая может быть причина данному явлению, и стоит ли на нее заострять внимание?

Да, небольшое "но", у данного эксперта отсутствует файл с расширением mq4.

 

Спасибо

Share this post


Link to post
Share on other sites
Igonter

Да, небольшое "но", у данного эксперта отсутствует файл с расширением mq4.

Спасибо

Вот в этом и причина... Проблемы будут в будущем, когда версия терминала сменится - а это обычно происходит раз в пару месяцев - то, возможно, перестанет работать эксперт. Потому что исходного кода нет для перекомпиляции (mq4)

Share this post


Link to post
Share on other sites
vector77

Подскажите начинающему.

MQL4 - может ли вызывать DLL, написанную на C++ для дальнейшего использования ?

 

Спасибо.

Share this post


Link to post
Share on other sites
CrazyMama

Достал импортер котировок в Investor Dreams, и не могу понять почему он не пашет... Может кто подскажет?

 

#property copyright

#property link "

#property indicator_chart_window

int init()

{

return(0);

}

int deinit()

{

return(0);

}

int start()

{

int counted_bars=IndicatorCounted();

int handle, bars=Bars;

 

handle = FileOpen( Symbol()+"_"+Period()+".prn", FILE_CSV|FILE_WRITE, ",");

 

if(handle>0)

{

FileWrite(handle, "<DTYYYYMMDD>","<TIME>","<OPEN>","<HIGH>","<LOW>","<CLOSE>","<VOL>" );

for(int i=(bars-1); i>=0; i--){

 

int YYYY=TimeYear( Time );

int MM=TimeMonth( Time );

int DD=TimeDay( Time );

int H=TimeHour( Time );

int M=TimeMinute( Time );

int S=TimeSeconds( Time );

 

if( MM<10 )

string MMM="0"+MM;

else MMM=MM;

 

if( DD<10 )

string DDD="0"+DD;

else DDD=DD;

if( H<10 )

string HOUR="0"+H;

else HOUR=H;

if( M<10 )

string MINUTE="0"+M;

else MINUTE=M;

if( S<10 )

string SECONDS="0"+S;

else SECONDS=S;

FileWrite(handle, YYYY+MMM+DDD, HOUR+MINUTE+SECONDS, Open, High, Low, Close, Volume);

}

 

FileClose(handle);

// Print( "\t В каталоге MetaTraider4\Experts\files создан файл "+Symbol()+"_"+Period()+".prn" );

 

 

 

Sleep(10000);

}

 

return(0);

}

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

Share this post


Link to post
Share on other sites
Wowa
Подскажите начинающему.

MQL4 - может ли вызывать DLL, написанную на C++ для дальнейшего использования ?

 

Спасибо.

Могут. Справочник MQL4-Выполнение программ-Вызов импортируемых функций


Мы сами знаем, что проблема не имеет решения. Мы хотим знать, как ее решать. (с) К. Хунта

Share this post


Link to post
Share on other sites
vector77

Спасибо Wowa.

Подскажи чайнику откуда можно закачать документацию по языку, хотя бы тот же Справочник MQL4 или какие-нить полезные примочки ввиде примеров.

Share this post


Link to post
Share on other sites
Wowa

В Метатрейдере выбираете пункт меню Сервис-Редактор MetaQuotes Language или кнопку на тулбаре или F4. Откроется Метаэдитор, внизу окно с закладкой справка


Мы сами знаем, что проблема не имеет решения. Мы хотим знать, как ее решать. (с) К. Хунта

Share this post


Link to post
Share on other sites
inco

привет

 

подскажите, как узнать, открывался ли в конкретный день ордер, и его данные (время, в какую сторону и т.д.)

по какой функции почитать?

 

спасибо

Share this post


Link to post
Share on other sites
Shu
привет

 

подскажите, как узнать, открывался ли в конкретный день ордер, и его данные (время, в какую сторону и т.д.)

по какой функции почитать?

 

OrdersHistoryTotal()

OrderSelect(int index, int select, int pool=MODE_HISTORY)

OrderOpenTime()

OrderType()

Share this post


Link to post
Share on other sites
касса

люди.подскажите плиз где найти советника выставляющего отложенные ордера вместо тех которые исполнились по тейк профиту.изначально ордера выставляются вручную.

Share this post


Link to post
Share on other sites
касса
люди.подскажите плиз где найти советника выставляющего отложенные ордера вместо тех которые исполнились по тейк профиту.изначально ордера выставляются вручную.

неужели таких не существует?

Share this post


Link to post
Share on other sites
Shu
неужели таких не существует?

да, может и существует! просто не очень конкретно поставлена задача. в реальной работе "условий" гораздо больше выплывет..

 

вон - совсем недавно Programmer в одном из советников реализовал установку отложенного ордера вместо закрытого по стоп-лоссу (если я путаю - заранее прошу прощения), чего ж тут - можно написать что угодно.

Share this post


Link to post
Share on other sites
inco

Можно ли одновременно запустить несколько метатрейдеров на разных счетах? Например, мне нужно потестить разные параметры одной системы. хотелось бы это сделать одновременно.

Share this post


Link to post
Share on other sites
~~SOM~~

Можно. Просто скопируйте директорию, в которой он установлен.

Share this post


Link to post
Share on other sites
inco

спасибо!

 

еще такой вопрос...

 

Нужно учитывать в программе определенную переменную, которую можно задать внутри самой программы. Эта переменная должна работать весь день и не меняться при инициализации программы.

 

Кроме этого, она должна быть различная для разных запущенных копий метатрейдера.

 

подскажите, пожалуйста, какую функцию использовать в таком случае? спасибо

Share this post


Link to post
Share on other sites
Shu
спасибо!

Нужно учитывать в программе определенную переменную, которую можно задать внутри самой программы. Эта переменная должна работать весь день и не меняться при инициализации программы.

 

Кроме этого, она должна быть различная для разных запущенных копий метатрейдера.

 

подскажите, пожалуйста, какую функцию использовать в таком случае? спасибо

глобальные переменные и используйте! :wink:

 

datetime GlobalVariableSet(string name, double value)

Share this post


Link to post
Share on other sites
inco

а как можно из кода программы выключить советника из торговли?

Share this post


Link to post
Share on other sites
Programmer

To inco:

Поставить переменную-флаг и проверять её в начале ф-ии start().

Share this post


Link to post
Share on other sites
Yudjin78

Подскажите Кирилл, как осуществить что-бы ,открытие второго ордера происходило не ранее чем через Х минут от открытия первого, даже если критерий по открытию второго ордера получен ранее.

Share this post


Link to post
Share on other sites
Programmer

To Yudjin78:

 

Создать переменную-flag (static или глобальную) и записывать в неё время открытия последнего ордера. Перед открытием очередного ордера вставить код:

 

if(TimeCurrent() < flag+X*60)

Sleep( (flag+X*60 - TimeCurrent())*1000 );

 

Если же Вам нужна не просто задержка, а для Вас критичны показания эксперта именно в момент открытия сделки, то можно поставить временной фильтр. Просто прямо перед ф-ей выставления ордера поставьте условие:

 

if(TimeCurrent() >= flag+X*60)

Share this post


Link to post
Share on other sites
Yudjin78

Пасиба!

Share this post


Link to post
Share on other sites
AndreyAn

Здравствуйте. Прошу подсказки на такой вопрос. Программа выставляет отложенный ордер, после его активации, через определённый промежуток времени (например через час после активации) , возникает необходимость его закрыть не дожидаясь срабатывания StopLoss или TakeProfit. Помогите пожалуйста,если можно, примером кода.

Спасибо.


:cowboy:www.forexfvt.16mb.com

Share this post


Link to post
Share on other sites
Shu
Здравствуйте. Прошу подсказки на такой вопрос. Программа выставляет отложенный ордер, после его активации, через определённый промежуток времени (например через час после активации) , возникает необходимость его закрыть не дожидаясь срабатывания StopLoss или TakeProfit. Помогите пожалуйста,если можно, примером кода.

Спасибо.

сравнивай текущее время со временем открытия ордера!

 

datetime TimeCurrent()

datetime OrderOpenTime()

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×