Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

Хитрости и трюки MQL


Рекомендуемые сообщения

Всем привет, если есть у кого книга: MQL4. Полное руководство по языку программирования MetaQuotes Language 4.pdf, поделитесь плиз, буду очень благодарен.

Все что есть в справке редактора и на форуме Метаквотес посвещенном этому языку более чем достаточно. Просто надо искать- и найдешь.

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 31
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Привет, коллеги!

 

Есть необходимость загрузить в индикатор произвольное количество заранее заданных уровней (типа того, как это делается в фибо-сетке). Однако, как я понял, использовать levels можно только для separte window. Для chart window в настройках индикатора уровни отсутствуют. Есть ли какая-нибудь возможность обойти эту проблему и задать уровни прямо в MT. Пока ничего лучше чем использовать внешний текстовый файл с заданными параметрами в голову не приходит.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Все ответы куда-то пропали... :)

Да действительно такие levels как в отделных окнах в главном окне отсутствуют. Но никто не мешает определять линии как объекты или использовать фибо для таких уровней... получится даже более удобнее, чем в в окошках...

Ссылка на комментарий
Поделиться на другие сайты

  • 11 месяцев спустя...

Здравствуйте!

 

В MQL если массивам не задан размер :

string symbols[] = {"GBPUSD","USDJPY","EURUSD","USDCHF","USDCAD","AUDUSD","NZDUSD"};

 

массивы часто глючат.

 

Это лечится функцией

ArrayResize(symbols,ArraySize(symbols));

Ссылка на комментарий
Поделиться на другие сайты

  • 6 месяцев спустя...
Здравствуйте, как убрать или заменить комментарий на графике в верхнем левом углу на время выполнения индикатора? Т.е. какой код для этого нужно встроить в исходник индикатора.
Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

Подскажите,

есть ли в MQL4 функция поиска выделенного объекта?

Т.е. если по объекту, например вертикальная линия, щёлкнуть левой кнопкой 2 раза,

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

 

Так вот можно ли программно определить этот именно выделенный объект, а потом программно определить его свойства

и потом в программе использовать эти свойства.

 

Это можно использовать, например,

- скрипт: в выделенной фибе, чтобы поменять число уровней в ней, установить только коррективные или импульсные

- скрипт: между двумя выделенными вертикальными линиями

(т.е. задать таким образом временной промежуток) построить МСФ и натянуть на него фибу

- скрипт: установить у выделенной трендовой линии другой цвет, толщину, тип линии....

 

В данном наборе скриптов "Автоматизация рисования картинок в MT4" http://forum.masterforex-v.org/index.php?showtopic=12751&st=75 - спасибо его создателю ,

подобные изменения выполняются только для последнего нарисованного объекта.

Чтобы изменить цвет, толщину линии её нужно удалить и нарисовать новую (т.е. фактически создать последний объект) - лишние операции...

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Всем привет! задача такая...

 

в одном терминале присутствуют инструменты и 4 и 5 значные...

не хочется менять параметры советника для каждого инструмента, хотелось бы программно определять 4 - или 5 значный инструмент ....это влияет на такие параметры советника или скрипта как TP SL и slipage.подскажите, кто нибудь нашел программный способ определения этого ?...

Ссылка на комментарий
Поделиться на другие сайты

Всем привет! задача такая...

 

в одном терминале присутствуют инструменты и 4 и 5 значные...

не хочется менять параметры советника для каждого инструмента, хотелось бы программно определять 4 - или 5 значный инструмент ....это влияет на такие параметры советника или скрипта как TP SL и slipage.подскажите, кто нибудь нашел программный способ определения этого ?...

 

int Digits; //Количество цифр после десятичной точки в цене текущего инструмента.
// или
double MarketInfo(string Symbol, MODE_DIGITS); // Тоже, произвольного символа


Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Всем привет! задача такая...

 

в одном терминале присутствуют инструменты и 4 и 5 значные...

не хочется менять параметры советника для каждого инструмента, хотелось бы программно определять 4 - или 5 значный инструмент ....это влияет на такие параметры советника или скрипта как TP SL и slipage.подскажите, кто нибудь нашел программный способ определения этого ?...

 

int Digits; //Количество цифр после десятичной точки в цене текущего инструмента.
// или
double MarketInfo(string Symbol, MODE_DIGITS); // Тоже, произвольного символа


 

Ну вроде не все так просто...

 

Например у 5- значных инструментов...

USDJPY 94.615

EURJPY 125.429

EURUSD 1.32164

EURGBP 0.86559

 

есть и 3 и 5 знаков после запятой

 

У 4-значных есть 2 или 4

 

AUDJPY 87.75

EURAUD 1,4271

 

Значит, получается таким образом:

 

if (Digits ==2 || Digits ==4) {k = 10;}

if (Digits ==3 || Digits ==5) {k = 1;}

 

 

Это для правильной постановке TP и SL.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Значит, получается таким образом:

 

if (Digits ==2 || Digits ==4) {k = 10;}

if (Digits ==3 || Digits ==5) {k = 1;} - Что такое "k", что с ним делать? :sad:

 

 

Это для правильной постановке TP и SL.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Помогите пожалуйста, подскажите где в коде поменять настройки:

 

цены: (мне нужен Close/Close) настройка Low/High

 

и ещё он настроен так: при пересечении линией %K (MainBuffer) уровня 30 снизу вверх индикатор скажет "Buy", а при пересечении уровня 70 сверху вниз - "Sell".

 

... а мне нужно наоборот пересечении линией %K (MainBuffer) уровня 30 сверху вниз и при пересечении уровня 70 снизу вверх...

 

 

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

//| sStochastic.mq4 |

//| Copyright © 2004, MetaQuotes Software Corp. |

//| http://www.metaquotes.net/ |

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

#property copyright "Copyright © 2004, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net/"

//----

#property indicator_separate_window

#property indicator_minimum 0

#property indicator_maximum 100

#property indicator_buffers 2

#property indicator_color1 LightSeaGreen

#property indicator_color2 Red

//---- input parameters

extern int KPeriod = 5;

extern int DPeriod = 3;

extern int Slowing = 3;

//---- buffers

double MainBuffer[];

double SignalBuffer[];

double HighesBuffer[];

double LowesBuffer[];

//----

int draw_begin1 = 0;

int draw_begin2 = 0;

//---- Номер бара, по которому будет искаться сигнал

#define SIGNAL_BAR 1

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

//| Custom indicator initialization function |

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

int init()

{

string short_name;

//---- 2 additional buffers are used for counting.

IndicatorBuffers(4);

SetIndexBuffer(2, HighesBuffer);

SetIndexBuffer(3, LowesBuffer);

//---- indicator lines

SetIndexStyle(0, DRAW_LINE);

SetIndexBuffer(0, MainBuffer);

SetIndexStyle(1, DRAW_LINE);

SetIndexBuffer(1, SignalBuffer);

//---- name for DataWindow and indicator subwindow label

short_name="sSto(" + KPeriod + "," + DPeriod + "," + Slowing + ")";

IndicatorShortName(short_name);

SetIndexLabel(0, short_name);

SetIndexLabel(1, "Signal");

//----

draw_begin1 = KPeriod+Slowing;

draw_begin2 = draw_begin1+DPeriod;

SetIndexDrawBegin(0, draw_begin1);

SetIndexDrawBegin(1, draw_begin2);

//----

return(0);

}

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

//| Stochastic oscillator |

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

int start()

{

int i, k;

int counted_bars = IndicatorCounted();

double price;

//----

if(Bars <= draw_begin2)

return(0);

//---- initial zero

if(counted_bars < 1)

{

for(i = 1; i <= draw_begin1; i++)

MainBuffer[bars-i] = 0;

for(i = 1; i <= draw_begin2; i++)

SignalBuffer[bars-i] = 0;

}

//---- minimums counting

i = Bars - KPeriod;

if(counted_bars > KPeriod)

i = Bars - counted_bars - 1;

while(i >= 0)

{

double min = 1000000;

k = i + KPeriod - 1;

while(k >= i)

{

price = Low[k];

if(min > price)

min = price;

k--;

}

LowesBuffer = min;

i--;

}

//---- maximums counting

i = Bars - KPeriod;

if(counted_bars > KPeriod)

i = Bars - counted_bars - 1;

while(i >= 0)

{

double max = -1000000;

k = i + KPeriod - 1;

while(k >= i)

{

price = High[k];

if(max < price)

max = price;

k--;

}

HighesBuffer = max;

i--;

}

//---- %K line

i = Bars - draw_begin1;

if(counted_bars > draw_begin1)

i = Bars - counted_bars - 1;

while(i >= 0)

{

double sumlow = 0.0;

double sumhigh = 0.0;

for(k = (i + Slowing - 1); k >= i; k--)

{

sumlow += Close[k] - LowesBuffer[k];

sumhigh += HighesBuffer[k] - LowesBuffer[k];

}

if(sumhigh == 0.0)

MainBuffer = 100.0;

else

MainBuffer = sumlow / sumhigh*100;

i--;

}

//---- last counted bar will be recounted

if(counted_bars > 0)

counted_bars--;

int limit = Bars - counted_bars;

//---- signal line is simple movimg average

for(i = 0; i < limit; i++)

SignalBuffer = iMAOnArray(MainBuffer, Bars, DPeriod, 0, MODE_SMMA, i);

//---- Статические переменные, в которых хранятся

//---- время последнего бара и направление последнего сигнала

static int PrevSignal = 0, PrevTime = 0;

//---- Если баром для анализа выбран не 0-й, нам нет смысла проверять сигнал

//---- несколько раз. Если не начался новый бар, выходим.

if(SIGNAL_BAR > 0 && Time[0] <= PrevTime)

return(0);

//---- Отмечаем, что этот бар проверен

PrevTime = Time[0];

//---- Если предыдущий сигнал был СЕЛЛ или это первый запуск (PrevSignal=0)

if(PrevSignal <= 0)

{

if(MainBuffer[sIGNAL_BAR] - 10.0 > 0 && 10.0 - MainBuffer[sIGNAL_BAR+1] >= 0)

{

PrevSignal = 1;

Alert("sStochastic (", Symbol(), ", ", Period(), ") - BUY!!!");

}

}

if(PrevSignal >= 0)

{

if(90.0 - MainBuffer[sIGNAL_BAR] > 0 && MainBuffer[sIGNAL_BAR+1] - 90.0 >= 0)

{

PrevSignal = -1;

Alert("sStochastic (", Symbol(), ", ", Period(), ") - SELL!!!");

}

}

//----

return(0);

}

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

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

Друзья, надеюсь этот вопрос задан в правильном месте и звучит следующим образом, как в MQL4 задать ширину и расстояние между свечами. Пример задачи:Set up the candle width to 5 pixels and the candle distance to 1 pixel.

Заранее благодарю за любую информацию и совет!

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...
Реально ли выучить MQL с нуля? Или это под силу лишь тому, кто уже умеет программировать на каком-то языке? И какой язык лучше сначала изучить?
Ссылка на комментарий
Поделиться на другие сайты

Реально ли выучить MQL с нуля? Или это под силу лишь тому, кто уже умеет программировать на каком-то языке? И какой язык лучше сначала изучить?

 

 

В принципе, вполне реально. Во всяком случае учебник Сергея Ковалева рассчитан как раз на тех кто «с нуля». Еще есть уроки с нуля на http://fxauto.pro. Это по-моему даже лучше, чем просто учебник. Но я считаю, что сначала лучше все таки хотя бы немного освоить язык Си. Тогда будет проще.

Ссылка на комментарий
Поделиться на другие сайты

  • 9 месяцев спустя...

Реально ли выучить MQL с нуля? Или это под силу лишь тому, кто уже умеет программировать на каком-то языке? И какой язык лучше сначала изучить?

Реально. Начал заниматься этим делом не с книги, а с того что начал изучать как устроены индикаторы и советники. Просматриваешь, улавливаешь логику построения, а если что не понятно - F1. После этого литература по MQL4 становится хорошим дополнением и осваивается намного легче

Ссылка на комментарий
Поделиться на другие сайты


×
×
  • Создать...