Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#5576

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


Простите, а каким образом Вы их контролируете? Не OrderSelect-ом?
#5577

Новый урок
http://tlap.io/mql4-metod-webrequest/

#5578

Здравствуйте! Пожалста, можно создать видеоурок на создание инфо панели для mql4? Заранее буду очень благодарен!!! ... И думаю не только я... ))

Изменено 1 июня, 2019 пользователем vikneo

#5579


Основная ошибка начинающих в работе с ордерами - это тупо каждый раз искать его среди открытых по Magic, OrderSelect достаточно "дорогая" функция

Вам встречалось частичное закрытие? Сейчас модно закрыть часть ордера, а другая часть может висеть в рынке с другим тикетом, имхо здесь без цикла с OrderSelect не обойтись. Новичков лучше не сбивать - пусть по старинке через цикл ордера контролируют, тем более 90% не слышали о классах вообще ничего.

Конечно встречалась и даже сам как-то реализовывал (редкий надо сказать зверь, да и не все ДЦ поддерживают).
Решается примерно так (общий смысл):

bool COrder::Closing(double mCloseLot=0.0){
if (cFlag>ORDER_MUST_CLOSE) return true;
cFlag=ORDER_MUST_CLOSE;
if (!OrderSelect(cTicket,SELECT_BY_TICKET)) return false;
if (OrderCloseTime()) {CheckPartialClose(); return true;}
if (!mCloseLot||mCloseLot>cLot) mCloseLot=cLot;
bool isPartial=NormalizeDouble(mCloseLot-cLot,cLotDigits)!=0.0;
if (!OrderClose(cTicket,mCloseLot,0.0,SHORT_MAX)) return false;
if (isPartial){
ReInitValues();
cFlag=ORDER_DEAL;}
else cFlag=ORDER_CLOSED;
return true;}

Изменено 31 мая, 2019 пользователем ZloyZam

#5580

Здравствуйте. Учусь писать советников. Подскажите плиз, что не так в нем. Это первая попытка :(

советник.txt3 скач.

#5581

Подскажите плиз, что не так в нем


А что Вы от него ожидаете?
Что в нем не так ? :)
#5582


Подскажите плиз, что не так в нем


А что Вы от него ожидаете?
Что в нем не так ? :)


Ошибки в тестере выдает (OrderModify error 1, OrderModify error 130) и закрывает как-то не так.


По плану было: Сначала выставляются отложенники байстоп и селлстоп на величину стопа(например 40п). Дальше, если цена открывается бай, выставляется новый байстоп и подтягивается селстоп. Ну и в обратную сторону также.

Изменено 3 июня, 2019 пользователем nelenaby

#5583

Ошибки в тестере выдает (OrderModify error 1, OrderModify error 130) и закрывает как-то не так.


Блин, в журнал не посмотрел :)
      else 
{ //если есть байстоп модифицируем
if (CountBuy()>=1)//и есть открытые бай
{
price_buystop = NormalizeDouble(price_buy+StopLoss*Point,Digits);
TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);
bool res = OrderModify(OrderTicket(),price_buystop,SL,TP,0,Blue);
if(!res)
Print("Ошибка модификации ордера buystop1. Код ошибки=",GetLastError());
else
Print("ордер buystop1 успешно модифицирован.");
}

if (CountSell()>=1)//и есть открытые и селл
{
price_buystop = NormalizeDouble(price_sell+StopLoss*Point,Digits);
TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);
bool res = OrderModify(OrderTicket(),price_buystop,SL,TP,0,Blue);
if(!res)
Print("Ошибка модификации ордера buystop2. Код ошибки=",GetLastError());
else
Print("ордер buystop2 успешно модифицирован.");
}
}

Я не нашел- где выбирается OrderTicket(), который Вы пытаетесь модифицировать...
И перед тем, как модифицировать ордер, нужно проверить- новые ТП/СЛ не совпадают с уже установленными ТП/СЛ ордера
#5584



Подскажите плиз, что не так в нем


А что Вы от него ожидаете?
Что в нем не так ? :)


Ошибки в тестере выдает (OrderModify error 1, OrderModify error 130) и закрывает как-то не так.


По плану было: Сначала выставляются отложенники байстоп и селлстоп на величину стопа(например 40п). Дальше, если цена открывается бай, выставляется новый байстоп и подтягивается селстоп. Ну и в обратную сторону также.

Если судить по кодам ошибок, то:
1 - это когда вы даете команду на изменение ордера, но при этом все его параметры повторяете.
130 - неправильные стопы, сюда же относятся цены открытия отложек. Либо цена невалидна (например для buystop
#5585

Вопрос - а в MT4 есть команды позволяющие выгружать данные в Эксель?
Было бы интересно выявлять характерные свойства Убыточных ордеров тех или иных советников.
Может есть урок на эту тему?

#5586

Вопрос - а в MT4 есть команды позволяющие выгружать данные в Эксель?

Создайте текстовый файл с разметкой .CSV
его можно открыть и анализировать в ехеле.
#5587

Вопрос - а в MT4 есть команды позволяющие выгружать данные в Эксель?


Читайте документацию и проблем не будет
https://www.metatrader4.com/ru/trading-platform/help/service/dde
#5588


Вопрос - а в MT4 есть команды позволяющие выгружать данные в Эксель?
Было бы интересно выявлять характерные свойства Убыточных ордеров тех или иных советников.
Может есть урок на эту тему?


Если из робота организовывать, то примерно так
uint Save(string fFileName,int fTicket){
if (!OrderSelect(fTicket,SELECT_BY_TICKET)) return 0;
int hndl=FileOpen(fFileName,FILE_CSV|FILE_READ|FILE_WRITE);
if (hndl==INVALID_HANDLE) return 0;
FileSeek(hndl,0,SEEK_END);
uint res=FileWrite(hndl,
OrderSymbol(),
(string)OrderType(),
DoubleToString(OrderOpenPrice(),5),
DoubleToString(OrderStopLoss(),5),
DoubleToString(OrderTakeProfit(),5)
//Что хотите, еще
);
FileClose(hndl);
return res;}
#5589

Подскажите, как можно выбрать программно определенный символ из списка?
Список символов, который расположен в тестере стратегий

terminal_Fgiboj6c1K.png

#5590


Подскажите, как можно выбрать программно определенный символ из списка?
Список символов, который расположен в тестере стратегий


Никак.
#5591

Сочинил индикатор с таким алгоритмом он ставит стрелки.

diMA11=iMA(NULL,0,MA11,0,MODE_SMA,PRICE_CLOSE,i);

diADX0=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_PLUSDI,i);
diADX1=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MINUSDI,i);
diADX2=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MAIN,i);

diADX01=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_PLUSDI,i+1);
diADX11=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MINUSDI,i+1);

diClose=iClose(NULL,0,i);
//купить
if(diADX0>diADX1 && diADX01Uroven && diClose>=diMA11) {BufUp=Low-ArrShift;pos=i;if(b);b=b+1;s=0;}}
//продать
if(diADX0diADX11 && diADX2>Uroven && diClose=High+ArrShift;pos=i;if(s);s=s+1;b=0;}}
=======================
Вопрос:
Как по вершинам +DI его заставить ставить скрелку?
Алгоритм такой:
Есть вершины 3,2,1.
Надо buy = 3>2 && 2Дальше я соображу как сделать полный алгоритм индикатора.
Мне нужно знать как правиьно прописать первую вторую и третью вершины.

Безымянный3.jpg

#5592


Сочинил индикатор с таким алгоритмом он ставит стрелки.

diMA11=iMA(NULL,0,MA11,0,MODE_SMA,PRICE_CLOSE,i);

diADX0=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_PLUSDI,i);
diADX1=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MINUSDI,i);
diADX2=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MAIN,i);

diADX01=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_PLUSDI,i+1);
diADX11=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MINUSDI,i+1);

diClose=iClose(NULL,0,i);
//купить
if(diADX0>diADX1 && diADX01Uroven && diClose>=diMA11) {BufUp=Low-ArrShift;pos=i;if(b);b=b+1;s=0;}}
//продать
if(diADX0diADX11 && diADX2>Uroven && diClose=High+ArrShift;pos=i;if(s);s=s+1;b=0;}}
=======================
Вопрос:
Как по вершинам +DI его заставить ставить скрелку?
Алгоритм такой:
Есть вершины 3,2,1.
Надо buy = 3>2 && 2Дальше я соображу как сделать полный алгоритм индикатора.
Мне нужно знать как правиьно прописать первую вторую и третью вершины.


Добавь еще два буфера для стрелок
#5593

Добавь еще два буфера для стрелок


Я старый алгоритм уберу и пропишу новый.

Добавлено: 06-06-2019 16:56:54

Мне нужно знать как правиьно прописать первую вторую и третью вершины.
#5594


Добавь еще два буфера для стрелок


Я старый алгоритм уберу и пропишу новый.

Добавлено: 06-06-2019 16:56:54

Мне нужно знать как правиьно прописать первую вторую и третью вершины.

Я думал у Вас с mql проблема, а Вы, оказывается, хотите, что бы Вам алгоритм написали, тогда Вам сюда:
https://www.mql5.com/ru/job
#5595

Я думал у Вас с mql проблема, а Вы, оказывается, хотите, что бы Вам алгоритм написали, тогда Вам сюда:


Я сам алгоритм напишу.
Мне нужно знать как правиьно прописать первую вторую и третью вершины.
Только это и всё.
#5596

Мне нужно знать как правиьно прописать первую вторую и третью вершины.

Если вершины находить умеете, то алгоритм следующий:
определяем глобальный массив вершин double V[3] = {0,0,0};
при нахождении новой вершины newV и newV > 0:
переписываем значения вершин V[2] = V[1]; V[1] = V[0]; V[0] = newV;
проверим заполненность массива if ( V[2] > 0 )
теперь можно анализировать вершины
#5597

Доброго времени суток!
Вопрос такого плана. Можно ли сделать так, что бы советник видел линии, которые наносятся на график в MT4 вручную?

#5598


Доброго времени суток!
Вопрос такого плана. Можно ли сделать так, что бы советник видел линии, которые наносятся на график в MT4 вручную?


Работа с графическими объектами:
https://docs.mql4.com/ru/objects/

Чтобы советник нашел объект support_line на графике, нужна функция ObjectFind:
https://docs.mql4.com/ru/objects/objectfind

Пример:
if (ObjectFind(0, "support_line") >= 0) {/*если линия есть на графике*/} else {/*если линии на графике нет*/}
#5599

Доброго дня всем!! Возможно ли сделать "Генератор меджика" или добавлять +1 к номеру, на случай забывчивости менять номер на той же валютной паре , но с разным таймфреймом?

Есть такой код, но он не работает или в нем что то не так...  Он все равно ставит Меджик с одинаковым номером... Помогите разобраться или эта затея гибельна, не стоит того??

 файл прекреплен.

GenericMagic.mq41 скач.

#5600
28 минут назад, vikneo сказал:

Доброго дня всем!! Возможно ли сделать "Генератор меджика" или добавлять +1 к номеру, на случай забывчивости менять номер на той же валютной паре , но с разным таймфреймом?

Есть такой код, но он не работает или в нем что то не так...  Он все равно ставит Меджик с одинаковым номером... Помогите разобраться или эта затея гибельна, не стоит того??

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025