Ваши вопросы по языку MQL4

vladradon

Программист
Благодарствую! Изучаю.
Есть еще на 5-м языке перевертыш на отложках и маркет ордерах и дубляже, которого я писал на заказ год назад под брокера "Открытие". Но это 5-ка, поэтому здесь не выкладываю. В плане самой стратегии (как заядлый мартингельщик) могу однозначно сказать, что перевертыш самый агрессивный и чтобы вылазить в плюс после неудачного входа и переворота (с индикатором или без) нужно либо значительно увеличивать тейкпрофит, либо коэффициент умножения (прибавления) или всем вместе играться, пока хватает депо. А депо в перевертыше заканчивается оочень быстро.:D
Я это к тому, что может не стоит заморачиваться тем, что уже пройдено другими и терять на этом время. С другой стороны когда-то один американец (по-моему) на этой стратегии заработал состояние, после чего она (стратегия переворота с увеличением ставки) стала известна всему миру.;)
 

on220

Интересующийся
Всем добра!Подскажите пожалуйста,как в функции мартина сделать так,чтобы лот был увеличен после минусовой сделки не до первой плюсовой,а до 2 или 3 плюсовой,а потом как обычно принимал начальное значение.
double Lot()
{
double lot;
if(OrdersHistoryTotal()==0)
{
lot=Lots;
}
if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderProfit()>0)
{
lot=Lots;
}
if(OrderProfit()<=0)
{
lot=OrderLots()*KLot;
}
}
if(lot>MaxLot)lot=MaxLot;
return(lot);
}
 

utes

Интересующийся
Мне бы в четверке хотя бы азы освоить. в этом перевертыше профит больше канала.
 

on220

Интересующийся
Всем добрый!Помогите по возможноси с мартином..Нужен вот какого принцыпа:чтоб возвращался к начальному значению не после первой плюсовой сделки,а после 2 или 3 плюсовой,т.е после минусовой открыл 2 или 3 сделки с тем лотом с которым закрылся в плюс.Вот примерно как бы это выглядело на истории:-0.2,-0.4,-0.8,+0.16,+0.16,(возврат)+0.1,+0.1,-0.2,итп.
 

ksv8028

Новичок форума
Всем привет. Ребят посмотрите пожалуйста где ошибка:please:


double alpha = (2.0+const)/(1.0+const+averagePeriod);

e1 = e1 + alpha*(price-e1); e2 = e2 + alpha*(e1-e2); double v1 = 1.5 * e1 - 0.5 * e2;
e3 = e3 + alpha*(v1 -e3); e4 = e4 + alpha*(e3-e4); double v2 = 1.5 * e3 - 0.5 * e4;
e5 = e5 + alpha*(v2 -e5); e6 = e6 + alpha*(e5-e6); double v3 = 1.5 * e5 - 0.5 * e6;


Чет ругается терминал.
 

vladradon

Программист
e1 = e1 + alpha*(price-e1); e2 = e2 + alpha*(e1-e2); double v1 = 1.5 * e1 - 0.5 * e2;
e3 = e3 + alpha*(v1 -e3); e4 = e4 + alpha*(e3-e4); double v2 = 1.5 * e3 - 0.5 * e4;
e5 = e5 + alpha*(v2 -e5); e6 = e6 + alpha*(e5-e6); double v3 = 1.5 * e5 - 0.5 * e6;


Чет ругается терминал.
Желательно показать скрин журнала, где и как ругается, но сходу могу сказать, что все переменные, которые используются глобально, нужно сначала прописать где-нибудь в начале кода и задать им какое-то базовое значение типа
PHP:
double alpha = 0;
double v1 =0;
double v2 =0;
double v3 =0;
double e3 =0;
double e4 =0;
а потом уже в самом расчете
PHP:
alpha = (2.0+const)/(1.0+const+averagePeriod);
e3 = e3 + alpha*(v1 -e3); e4 = e4 + alpha*(e3-e4);  v2 = 1.5 * e3 - 0.5 * e4;
т.к. иначе компилятор может ругнуться на изначально не определенные переменные. Но это первое, что бросается в глаза и я не знаю, на что конкретно ругается компилятор - нужно больше инфы.
 
Последнее редактирование:

eevviill2

Местный знаток
vladradon
:D

Компилятор не ругается на неопределённые глобальные пельменные:D
 

AlexeyVik

Программист mql4 mql5
vladradon
:D

Компилятор не ругается на неопределённые глобальные пельменные:D
.
Всем привет. Ребят посмотрите пожалуйста где ошибка:please:


double alpha = (2.0+const)/(1.0+const+averagePeriod);

e1 = e1 + alpha*(price-e1); e2 = e2 + alpha*(e1-e2); double v1 = 1.5 * e1 - 0.5 * e2;
e3 = e3 + alpha*(v1 -e3); e4 = e4 + alpha*(e3-e4); double v2 = 1.5 * e3 - 0.5 * e4;
e5 = e5 + alpha*(v2 -e5); e6 = e6 + alpha*(e5-e6); double v3 = 1.5 * e5 - 0.5 * e6;


Чет ругается терминал.
обнулять переменные нужно.
Задача:
Буратино дали 5 яблок, 2 из них он съел. Вопрос: Сколько яблок осталось у Буратино?
 
Последнее редактирование модератором:

ksv8028

Новичок форума
Всем СПАСИБО!!! Проблему решил путем изменения своей стратегии и соответственно в коде. Еще раз ИЗВИНЯЮСЬ за потраченное на меня Время.
 

vladradon

Программист
Мне бы в четверке хотя бы азы освоить. в этом перевертыше профит больше канала.
Я забыл добавить про своего перевертыша, что выложил выше - там их 2 одинаковых по алгоритму (2 в одном) с разными входными настройками. Поэтому в коде дублируются переменные. Не самый, конечно, простой вариант для изучения 4-ки.:)
 
добрый день!
пожалуйста помогите.есть такой индикатор. mql5.com/ru/code/19049
он открывает сайт.а мне удобно было бы,что бы он запускал скрипт.какой я ему укажу.
можно его переделать?заранее спасибо.
 
Последнее редактирование модератором:

Ugar

Гуру форума
добрый день!
пожалуйста помогите.есть такой индикатор. mql5.com/ru/code/19049
он открывает сайт.а мне удобно было бы,что бы он запускал скрипт.какой я ему укажу.
можно его переделать?заранее спасибо.
А зачем? Любой скрипт можно запускать горячими клавишами без всяких индикаторов. В контекстном меню любого скрипта есть возможность задать горячие клавиши.
 
Последнее редактирование модератором:

vladradon

Программист
добрый день!
пожалуйста помогите.есть такой индикатор. mql5.com/ru/code/19049
он открывает сайт.а мне удобно было бы,что бы он запускал скрипт.какой я ему укажу.
можно его переделать?заранее спасибо.
Есть простой способ - перенести тело скрипта в код индикатора в виде функции и в индикаторе запускать эту функцию (или набор функций скрипта) вместо строчки
PHP:
ShellExecuteW(0,"Open", site, "", "", 1);
И есть более сложный через API
PHP:
#define MT4_MESSAGE "MetaTrader4_Internal_Message"
#define TA_SCRIPT_NAME "<имя скрипта>"

#import "user32.dll"
  int RegisterWindowMessageA(uchar &lParam[]);
  int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
#import

...
// Тело обработчика нажатой кнопки
    char buf[];
    StringToCharArray(MT4_MESSAGE, buf);
    int MT4InternalMsg = RegisterWindowMessageA(buf);
    StringToCharArray(TA_SCRIPT_NAME, buf);
    
    int hwnd = WindowHandle("<символ>", <таймфрейм>);
    if (hwnd < 0)
    {
      Alert("Заданное окно для запуска скрипта не найдено.");
      return;
    }
    
    SendMessageA(hwnd, MT4InternalMsg, 16, buf);
- это общий пример (болванка), в которую нужно прописать нужные данные и запускать "Тело обработчика нажатой кнопки" так же вместо строки
PHP:
ShellExecuteW(0,"Open", site, "", "", 1);
Но все равно вариант Ugar гораздо проще!;)
 

eevviill2

Местный знаток
Закиньте кто-то в code base виртуальный трейлинг.
Ато вчера искал и никто не додумался из супер пупер программистов на mql5 сделать виртуальный трейлинг. Есть только убогий трейлинг от chmillion.
МетаКротам не привет!
 

Вложения

  • Virtual trailing EA.mq4
    5,5 КБ · Просмотры: 34

vladradon

Программист
Закиньте кто-то в code base виртуальный трейлинг.
Ато вчера искал и никто не додумался из супер пупер программистов на mql5 сделать виртуальный трейлинг. Есть только убогий трейлинг от chmillion.
Он не будет работать по всем символам одновременно! -Только на том, на котором стоит.
PHP:
ObjectCreate(0,name,OBJ_HLINE,0,0,price);
- 0-идентификатор графика в терминале и у тебя только текущий указан (0). Чтобы трал работал по всем открытым графикам, нужно считывать ID графика и по нему уже рисовать линию на нужном графике, а не на текущем. Только я однажды пытался сделать считывание ID открытых графиков и терминал выдавал только 0 первого графика, а все остальные были EMPTY и фиг, что дальше сделаешь. Поэтому я нашел другой способ виртуального трала по всем ордерам всех графиков - думай дальше, студент.;):D
 

eevviill2

Местный знаток
Он не будет работать по всем символам одновременно! -Только на том, на котором стоит.
PHP:
ObjectCreate(0,name,OBJ_HLINE,0,0,price);
- 0-идентификатор графика в терминале и у тебя только текущий указан (0). Чтобы трал работал по всем открытым графикам, нужно считывать ID графика и по нему уже рисовать линию на нужном графике, а не на текущем. Только я однажды пытался сделать считывание ID открытых графиков и терминал выдавал только 0 первого графика, а все остальные были EMPTY и фиг, что дальше сделаешь. Поэтому я нашел другой способ виртуального трала по всем ордерам всех графиков - думай дальше, студент.;):D
Милашка. Пусть работает на одном графике:D


P.S. Ты наверно взял 2-ух мерный массив? Умничка.Съешь пирожок:D
 
Последнее редактирование:
Верх