Страницы: 1 2 3 4 5 ... 72 След.
Ответить

Учимся создавать советники/эксперты/индикаторы

 
......В данной ветке предлагаю совместно пошагово создавать новые методики, индикаторы, эксперты.

Первый вопрос к аудитории: что будем программировать, эксперт, скрипт или индикатор?

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

Обоснование необходимости: с одной стороны, у нас есть статистика, что в 95% случаев после открытия сделки (по большинству известных методик) цена ходит в "-" 5 пунктов. С другой стороны, нам лень для открытия каждой сделки совершать длинную процедуру выставления отложенного ордера и после этого еще высчитывать злополучные уровни цен.........
 
......Функция оказалась достаточно простой в реализации:

#property copyright "Copyright © 2007, Fore-x-man"
#property link "Fore-x-man@ukr.net"
#property show_inputs
extern int level = 5;
extern double lot = 0.1;
extern bool place_buylimit = false;
extern bool place_selllimit = false;
int start(){
if (place_buylimit) OrderSend(Symbol(),OP_BUYLIMIT,lot,
Ask-level*Point,0,0,0,"V",0,0,CLR_NONE);
if (place_selllimit) OrderSend(Symbol(),OP_SELLLIMIT,lot,
Bid+level*Point,0,0,0,"V",0,0,CLR_NONE);
//Comment("Error = ",GetLastError());
}........
 
......Для того, чтобы реализовать ее в терминале, необходимо сделать следущее:

1. Зайти в редактор MQL. Для этого, находясь в терминале, нажмите F4
2. Создать новый скрипт. Нужно нажать сочетание клавиш CTRL+N, затем, в окне диалога выбрать "script", нажать "далее", затем дать скрипту имя и нажать "готово"
3. Вставить код. Нужно просто заменить содержимое на код, который указан выше.
4. Откомпилировать. Просто нажать F9
5. Если нет ошибок компиляции, можно начинать зарабатывать дополнительную прибыль
6. Перед запуском скрипта впервые, нужно зайти в терминале во вкладку "сервис" - "настройка" - "советники" и поставить галочку напротив "Разрешить советнику торговать"
7. Запуск скрипта. В навигаторе во вкладочке скрипты находим наше детище и перетаскиваем его на график
8. В появившемся меню заходим во "входные параметры". Выбираем уровень, на котором от текущей цены установить лимит-ордер, лот, и ставим "true" напротив place_buylimit либо place_selllimit

Нажимаем "ок". Наслаждаемся.........
 
......Параллельно проведем опрос читающих: используете ли Вы в своей торговле механические методы (скрипты, советники)?........
 
......2Fore-x-man
Всегда с уважением относился к тем, кто умеет программировать.
Сам ни в зуб ногой.
Вот, например, такое предложение по написанию скрипта, который определяет наступление момента дивергенции на рынке. Ну типа, мигает или пищит, когда эта самая дивергенция образовалась (по закрытию бара). Сложно такой скрипт наваять на MQL?
Многие отслеживают дивергенции, когда пара-тройка торгуемых инструментов - проблем нет, все и так видно и понятно. Но когда инструментов несколько десятков (а в перспективе и сотен) то процесс отслеживания диверов становится утомительным. В качестве индикатора можно взять любой осциллятор - MACD, RSI, Stochastic и др.........
 
......ps: Включается после полного формирования сигнала........
 
......
Цитата
CDF
Вот, например, такое предложение по написанию скрипта, который определяет наступление момента дивергенции на рынке. Ну типа, мигает или пищит, когда эта самая дивергенция образовалась (по закрытию бара). Сложно такой скрипт наваять на MQL?


Ниже код MACD, который облегчит работу по определению дивергенции.........
 
......//+------------------------------------------------------------------+
//| F-X-M_MACD.mq4 |
//| Copyright © 2007, Fore-x-man |
//| Fore-x-man@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Fore-x-man"
#property link "Fore-x-man@ukr.net"
//---- indicator settings
#property copyright "Copyright © 2007, Fore-x-man"
#property link "Fore-x-man@ukr.net"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Silver
#property indicator_color2 Green
#property indicator_color3 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
int SignalSMA=1;
//---- indicator buffers
double MacdBuffer[];
double SignalBuffer[];
double DiverBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,MacdBuffer);

SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,SignalBuffer);

SetIndexStyle(2,DRAW_HISTOGRAM);

SetIndexBuffer(2,DiverBuffer);

//SetIndexDrawBegin(2,DiverBuffer);

//---- name for DataWindow and indicator subwindow label
IndicatorShortName("Fore-x-man MACD("+FastEMA+","+SlowEMA+")");

//---- initialization done
return(0);

}
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence |
//+------------------------------------------------------------------+
int start()
{
int limit;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
for(int i=0; i<limit; i++)
MacdBuffer=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

//---- signal line counted in the 2-nd buffer
for(i=0; i<limit; i++){
if (MacdBuffer > 0) {
if (MacdBuffer > MacdBuffer && MacdBuffer > MacdBuffer && i != 0 ){
SignalBuffer=MacdBuffer;
}
else SignalBuffer=0;
}
if (MacdBuffer < 0) {
if (MacdBuffer < MacdBuffer && MacdBuffer < MacdBuffer && i != 0){
SignalBuffer=MacdBuffer;
}
else SignalBuffer=0;
}
if (MacdBuffer == 0) SignalBuffer = 0;
}

//---- counted in the 2-d buffer
for(i=0; i<limit; i++){
int j;
double p1,p2,m1,m2;
if (SignalBuffer != 0){
p1 = Close;
m1 = SignalBuffer;
for (j = i+1; j < limit; j++) {
if (SignalBuffer != 0) {
p2 = Close;
m2 = SignalBuffer;
break;
}
}
if ((m1 > m2 && p1 < p2) || (m1 < m2 && p1 > p2)) DiverBuffer = MacdBuffer;
else DiverBuffer = 0;
}
else DiverBuffer = 0;
}
//Comment("Error number = ", GetLastError());
//---- done
return(0);
}
//+------------------------------------------------------------------+........
 
......interbankfx.com.ua/mql-fxmmacd.jpg........
Страницы: 1 2 3 4 5 ... 72 След.
Ответить
Читают тему (гостей: 1)

Вход