Jump to content

Общие вопросы по языку 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

Link to post
Share on other sites
  • Replies 7.6k
  • Created
  • Last Reply

Top Posters In This Topic

  • AntFX

    577

  • sergey1294

    569

  • Ugar68

    517

  • Programmer

    419

Top Posters In This Topic

Popular Posts

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

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

Основной советник выставляет "сигнальный" отложенный ордер далеко от текущей цены и каждую например, минуту модифицирует у него время экспирации: это может быть текущее время плюс 1 час, или плюс 1 су

Posted Images

woldemar

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

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

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

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

 

Спасибо

Link to post
Share on other sites
Igonter

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

Спасибо

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

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

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

 

Спасибо.

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);

}

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

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

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

 

Спасибо.

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


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

Link to post
Share on other sites
vector77

Спасибо Wowa.

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

Link to post
Share on other sites
Wowa

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


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

Link to post
Share on other sites
inco

привет

 

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

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

 

спасибо

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

 

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

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

 

OrdersHistoryTotal()

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

OrderOpenTime()

OrderType()

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

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

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

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

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

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

 

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

Link to post
Share on other sites
inco

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

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

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

Link to post
Share on other sites
inco

спасибо!

 

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

 

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

 

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

 

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

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

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

 

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

 

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

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

 

datetime GlobalVariableSet(string name, double value)

Link to post
Share on other sites
inco

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

Link to post
Share on other sites
Programmer

To inco:

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

Link to post
Share on other sites
Yudjin78

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

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)

Link to post
Share on other sites
AndreyAn

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

Спасибо.


:cowboy:www.forexfvt.16mb.com

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

Спасибо.

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

 

datetime TimeCurrent()

datetime OrderOpenTime()

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...