Jump to content
Rosh

Статьи по программированию на MQL-4.

Recommended Posts

lukich

Rosh ,а как написать индикатор в отдельном окне вычитающий из цен Скользящую среднюю,стандартного индикатора? Заранее благодарю!

Share this post


Link to post
Share on other sites
Rosh

Постараюсь в ближайшее время пройти индекс разницы.

Share this post


Link to post
Share on other sites
DMitch

Rosh

Огромная благодарность за курс!

Всё очень красиво и доходчиво.

 

Вопрос по CrossMA.

Как в углу графика добавить стрелки которые будут показывать направление этих средних, имеется в виду другой ТФ.

Хотелось бы расмотреть вопрос вывода дополнительной информации,

и в нужном нам месте на график.

Share this post


Link to post
Share on other sites
NewTartan
Год назад сравнение MQL-2 и MQL-4 было бы более актуальным, сейчас , я думаю, лишь небольшой процент знает и помнит язык для МТ3. Теоретически можно сделать перевод индикатора на МТ4 в виде статьи, надо посмотереть - что-за индикатор.

Привет.

Спасибо за то что не отказал. уть не в том, что никто уже не помнит

язык для МТ3, а в том что кто-то ещё на МТ3 работает и пишет для себя

а не на продажу и индикаторы и экспертов и когда настанет день когда МТ4 заменит МТ3 хотелось бы уже всю мат.часть, которая успешно работает на МТ3 перевести и я думаю даже улучшить для МТ4. И чем больше аналогий и параллелей есть в твоем распоряжении

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

другого и поэтому переход на Си-образный язык несколько затруднён, но не самим программирование, а именно тем что первообразующий язык для МТ4 Си. Вот в этом и вся проблема. Все ведб не будешь выкладывать для переделки? Многие с радостью это сделают, но увы есть ведь у каждого свои маленькие секреты и их не всегда хочется раскрывать. Вот индикатор, который (проще не бывает)

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

Заранее благодарен. Попутного тренда и больших профитов.

smcci_131.zip


Бороться, искать, найти и не сдаваться

Share this post


Link to post
Share on other sites
Rosh

Похоже, действительно, достойный кандидат на перевод. :)

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

Если получится - в этом месяце сделаю.

Share this post


Link to post
Share on other sites
NewTartan
Похоже, действительно, достойный кандидат на перевод. :)

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

Если получится - в этом месяце сделаю.

Привет.

Спассибо за оперативный ответ.

Буду внимательно следить за материалами мастер-класса.

Кроме почего - это как личная просьба - как-то прислали мне индикатор сделанный OlegVS - хороший индикатор, добротный, но не автомат. Я его переделал под автомат, но в МТ3 всего два буфера и чтобы извлечь остальные данные пиходится всё считать в эксперте, а хотелось бы иметь данные готовыми из индикатора. Если не очень в лом то и этот индюк к тому же - и вывод графики лишний раз поизучать можно. Попутного тренда и больших профитов.

3auto_targets_168.zip


Бороться, искать, найти и не сдаваться

Share this post


Link to post
Share on other sites
cipoch

индекс доллара есть у кого для МТ4?


Делай деньги! А остальное все дребидедень.

(с)Остров сокровищ

Share this post


Link to post
Share on other sites
cipoch

привет!

есть у когонибудь вот это для МТ4?

http://www.umis.ru/analitics/trading_school/fc_methods

 

спасибо


Делай деньги! А остальное все дребидедень.

(с)Остров сокровищ

Share this post


Link to post
Share on other sites
corstat

Уважаемый Rosh! Или кто-нибудь, кто может помочь.

Попытался воспроизвести запись котировок в файл CSV с помощью скрипта из статьи "Скрипт - мостик в EXELL". Сам файл записывается, но при его открытии записи странные.

Названия столбцов записаны правильно, первый столбец записи даты и времени записан правильно, расчеты :CLOSE-OPEN" выполнены и записаны правильно (имеется в ввиду десятеричная система), а половина записей в столбцах OPEN, HIGH, LOW,CLOSE выполнена почему-то в виде "янв.28", "янв.80" и т.д. Ячейка с записью "янв.28" при установке курсора открывается в запись "01.01.7828" (запись, видимо, должна быть 1.7828), а сама ячейка имеет формат "Дополнительный". Такой таблицы, как в статье "Скрипт - мостик в EXELL" не получается.

Какой формат вообще должен быть в записываемом файле CSV?

Помогите разобраться. Операционка WINDOWS XP PRO, EXCELL 2002 SP1.

Share this post


Link to post
Share on other sites
Rosh

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

Пропробуйте разобраться снастройками Офиса.

Share this post


Link to post
Share on other sites
GameOver
Индикатор и советники по статье 12. Оптимизация индикатора

 

привет.

гдето видел - теперь (когда понадобилось :-) ) не могу найти

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

 

а то происходит фигня - при переключении на ТФ где нет котировок, индюк рисует себя, потом подгружаются котировки и все нарисованное улетает в конец(влево) :-) (ессно, если в коде есть ограничение на кол-во баров отображаемых на графике)

 

думал, в твоей статье найти ответ - не нашел :-(


Никаких крыльев нету. Просто умираешь и все. (гусеница)

Share this post


Link to post
Share on other sites
GameOver

спасибо :!:

 

хотя сразу фиг поймешь, че к чему...

---

как я понял, должно быть чтото типа

 

while (GetLastError() == 4066) Sleep(1000);

 

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

однако, как и прежде при переключении получаеца %игня

причем - заметьте, линии построил правильно - а они строюца после заполнения массивов собсно..

че делать?

post-26054-1404209999,356_thumb.png


Никаких крыльев нету. Просто умираешь и все. (гусеница)

Share this post


Link to post
Share on other sites
Rosh

НЕ совсем так, после первого вызова вернет ноль, хотя данные еще могут быть не подкачаны. Необходимо "провоцировать" терминал для получения именно этой ошибки, то есть производим вызов индикатора , а после этого проверяем наличие ошибки и равенсто ее значению 4066 и так до тех пор, пока она не пропадет.

 

int GetLastError( )

 

Функция возвращает код последней ошибки, после чего значение специальной переменной last_error, в которой хранится код последней ошибки обнуляется. Так что последующий вызов GetL astError() вернет значение 0.

 

Пример:

 

int err;

int handle=FileOpen("somefile.dat", FILE_READ|FILE_BIN);

if(handle<1)

{

err=GetLastError();

Print("error(",err,"): ",ErrorDescription(err));

return(0);

}

 

Share this post


Link to post
Share on other sites
GameOver

не, либо лыжи не едут.. либо я че не вкуриваю

 

вот примитивный код

//------------------------------------------------------------------/
// Индикатор-пример
//------------------------------------------------------------------/
#property copyright "GreenDog" 
#property link      "@inbox.ru" 

#property indicator_chart_window 
#property indicator_buffers 2
#property indicator_color1 Red 
#property indicator_color2 Blue 

extern int qBars=200;

double Buf1[]; 
double Buf2[]; 

double isFirst;

int init() 
 { 
  int code=161; string Rem="example";

  IndicatorShortName(Rem); 
  SetIndexStyle(0,DRAW_ARROW); 
  SetIndexStyle(1,DRAW_ARROW); 
  SetIndexArrow(0,code); 
  SetIndexArrow(1,code); 
  SetIndexBuffer(0,Buf1); 
  SetIndexBuffer(1,Buf2); 
  SetIndexEmptyValue(0,0.0);
  SetIndexEmptyValue(1,0.0);
  SetIndexLabel(0,Rem); 
  SetIndexLabel(1,Rem); 
  return(0);
 } 

int deinit() {
}

int start(){

  if (isFirst==Time[0]) return(0); else isFirst=Time[0]; // запускаеца тока на 1м тике

  if (qBars==0) qBars=Bars-1; // если 0, то на все бары, иначе тока на qBars
  for (int cnt=qBars;cnt>0;cnt--) { // кроме 0 бара

     Buf1[cnt]=Low[cnt];
     Buf2[cnt]=High[cnt];
  }
  return(0); 
}

 

цепляем на график, жмем

- (минус)

Home

и несколько раз PageUp () шустренько - чтобы хистори подгружалось

 

и получаем вот такую фигень :-) (см pic1)

 

кстати такую же фигню наблюдаю в других индюках, например

complex семеныча - с той лишь разницей, что считает не все бары, а первые 200. (см pic2)

 

сдаеца мне, что дело не в бобине

а в том, что мт чето косячит при отображении массивов

post-26054-1404209999,6681_thumb.gif

post-26054-1404209999,7161_thumb.gif


Никаких крыльев нету. Просто умираешь и все. (гусеница)

Share this post


Link to post
Share on other sites
Rosh

Complex Семен Семеныча, насколько я помню, использует множество не родных валют, поэтому прокрутка графика вглубь истории непредсказуема, если об этом не позаботились в момент написания индикатола. Твой вариант смогу рассмотреть не раньше завтра.

Share this post


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

 

но если мы пишем только в первые элементы массива с индексами 1-200 (код прозрачный - других индексов в принципе нет), то откуда беруца значения в остальных ячейках..

на первый взгляд, происходит некорректное расширение массива-буффера - вперед элементы переносяца, но не затираюца.

причем не затираеца именно отображаемое..

 

Твой вариант смогу рассмотреть не раньше завтра.

 

спасибоще!!! :!: буду ждать :-)

 

или еще кто че знает по этому поводу?


Никаких крыльев нету. Просто умираешь и все. (гусеница)

Share this post


Link to post
Share on other sites
GameOver
Почитай еще это - http://www.metaquotes.ru/forum/4882/

 

хм, оказываеца ты тоже сталкивался :-)

 

я так понял, рекомендуют делать инициализацию массива

в инит

 

ArrayInitialize(Buf1,0.0);

ArrayInitialize(Buf2,0.0);

SetIndexBuffer(0,Buf1);

SetIndexBuffer(1,Buf2);

 

на всякий случай, делаю это же перед заполнением массива

 

ArrayInitialize(Buf1,0.0);

ArrayInitialize(Buf2,0.0);

 

for (int cnt=qBars;cnt>0;cnt--) { // кроме 0 бара

Buf1[cnt]=Low[cnt];

Buf2[cnt]=High[cnt];

}

 

различие от твоего кода в том, что заполняем не весь массив, а тока его часть - последние (справа) 200 баров. возможно в этом причина, никто и не думал, что массив может заполняца не полностью :-)

 

но глюк не изчезает - можно либо шустро нажимать PageUp (чтобы происходила подгрузка; если все загружено, глюка нет конечно)

либо при переключении на ТФ , где нет вообще баров, нажтмать Home.

(я например это делаю на автомате - не задумываясь :) ) -

прорисованые буфера индикатора расположаца в произвольном месте.


Никаких крыльев нету. Просто умираешь и все. (гусеница)

Share this post


Link to post
Share on other sites
-FOX-

Люди, помогите кто знает. Пытаюсь написать эксперта.Алгоритм действий следующий:

1.выставить два ордера buystop/sellstop

2.как только один ордер откроется, необходимо удалить оставшийся.

 

С первым пунктом проблем не было, а со вторым уже третью неделю мучаюсь.. :evil: Пишу таким образом:

Выставляю два ордера X и Y, далее

if(OrderType==0) OrderDelete(Y);

if(OrderType==1) OrderDelete(X);

В итоге МТС выставляет мне два ордера и тут же один из них удаляет, не дождавшись открытия позиции. Как сделать так, чтобы МТС удаляла ордер после открытия позиции???

Share this post


Link to post
Share on other sites
GameOver

int OrderType( )

 

Возвращает тип операции текущего выбранного ордера. Mожет быть одной из следующих величин:

OP_BUY - позиция на покупку,

OP_SELL - позиция на продажу,

OP_BUYLIMIT - отложенный ордер на покупку по достижении заданного уровня, текущая цена выше уровня,

OP_BUYSTOP - отложенный ордер на покупку по достижении заданного уровня, текущая цена ниже уровня,

OP_SELLLIMIT - отложенный ордер на продажу по достижении заданного уровня, текущая цена ниже уровня,

OP_SELLSTOP - отложенный ордер на продажу по достижении заданного уровня, текущая цена выше уровня.

Ордер должен быть предварительно выбран с помощью функции OrderSelect().

 

-----

если ты выставляешь лимитник или стоп-ордер, будет возвращать

OP_BUYLIMIT или OP_BUYSTOP

когда поз откроеца, вернет OP_BUY


Никаких крыльев нету. Просто умираешь и все. (гусеница)

Share this post


Link to post
Share on other sites
Player 2
но глюк не изчезает - можно либо шустро нажимать PageUp (чтобы происходила подгрузка; если все загружено, глюка нет конечно)

либо при переключении на ТФ , где нет вообще баров, нажтмать Home.

(я например это делаю на автомате - не задумываясь ) -

прорисованые буфера индикатора расположаца в произвольном месте.

Я не понял, ты с глюком разобрался? Убрал его? Вообще, ты умеешь определять загружены ли все данные? У меня ни фига это не получается. Судя по описанию, ошибка err_history_will_updated может возникать только если обращение идет к неоткрытому графику/таймфрейму. Если попытаться скопировать (или взять данные) из текущего графика то такая ошибка не возникнет даже если данные не загружены (только что проверил: тик пришел, данные не заргужены, а при попытке обращения к ним никаких ошибок не возникает). То есть похоже что разработчики здесь круто прокололись, считая что если открыт график то это значит что на нем все загружено. Похоже придется пойти на форум метаквотов и устроить там разнос. Что-то они меня там не хотят регистрировать. Ну я им еще покажу где раки зимуют. Они мне еще за goto ответят. :lol:

Share this post


Link to post
Share on other sites
Rosh

Самый простой вариант - в init() ставим очищение всех буферов.

В Start() проверяем текущий Bars и предыдущий, если разница больше 1, значит произошла подкачка истории (то ли при загрузке терминала, то ли по заропсу пользователя). В этом случае вызываем init().

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×