Уроки по программированию на языке MQL4 от eevviill

Dobryj

Почетный гражданин
Мужики еще одна проблемка !
помогите решить )
линию в будущее рисует а вот объект арров с кодом 89 не хочет , дальше 0 бара ни в какую :disappointed:
//+------------------------------------------------------------------+
//| Time_Go! .mq4 |
//| |
//| Dobryjj |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""




/*=====INPUT parameters=====*/
extern int A=50; //откладываемое расстояние
double pr0,prp,Hight,low;
double V,kt,per,price;
int i0,ip;
datetime tp,t0,time;
/*==========================*/

int init()
{
per=Period();
kt=per;
t0=WindowTimeOnDropped();
i0=iBarShift(Symbol(),Period(),t0); // считываем
pr0=Close[i0];
ip=i0+40;
tp=Time[ip];
prp=Close[ip];

if(ObjectFind("LineV")==-1)
{
ObjectCreate("LineV",2,0,tp,prp,t0,pr0); //Рисуем трендовую линию
ObjectSet ("LineV",OBJPROP_COLOR,Blue);
ObjectSet ("LineV", OBJPROP_RAY,False);
}

if(ObjectFind("LineW")==-1)
{
ObjectCreate( "LineW",OBJ_ARROW,0,0,0); //Рисуем Вертикальную линию
ObjectSetText("LineW","text",12,"Arial",Blue);
ObjectSet("LineW",OBJPROP_ARROWCODE,89);
ObjectSet("LineW",OBJPROP_WIDTH,2);
ObjectSet("LineW",OBJPROP_COLOR,Blue);
}
return(0);
}
/*==========================================================*/

int start()
{
while(IsStopped()==false)
{
tp=ObjectGet("LineV",OBJPROP_TIME1);
t0=ObjectGet("LineV",OBJPROP_TIME2);
prp=ObjectGet("LineV",OBJPROP_PRICE1);
pr0=ObjectGet("LineV",OBJPROP_PRICE2);
ip=iBarShift(Symbol(),Period(),tp);
i0=iBarShift(Symbol(),Period(),t0);

if (t0>Time[0]) i0=(Time[0]-t0)/60/per;
/*------------------------------------------*/
prp=ObjectGet("LineV",OBJPROP_PRICE1);
pr0=ObjectGet("LineV",OBJPROP_PRICE2);
pr0=NormalizeDouble(pr0,4);
prp=NormalizeDouble(prp,4);
/*------------------------------------------*/

//перерисовываем
int degre_75=75;
Ris(degre_75,"1234");


}
return(0);
}
/*==========================================================*/

int deinit()
{
ObjectDelete("LineV");
ObjectDelete("LineW");
}
/*==========================================================*/
int Ris(int xxx,string text)
{
time = Time[i0-xxx];
price=iHigh(Symbol(),PERIOD_D1,2);
ObjectSet( "LineW",OBJPROP_TIME1,time);
ObjectSet( "LineW",OBJPROP_PRICE1,price);
ObjectSetText("LineW",text,12,"Arial",Blue);

return(0);
}
 

eevviill

Заблокирован
Мужики еще одна проблемка !
помогите решить )
линию в будущее рисует а вот объект арров с кодом 89 не хочет , дальше 0 бара ни в какую :disappointed:
...
Ты лучше фото скинь. И код как ты делаешь кусок а не весь.
И ветка есть вопросы по mql4.
 

AlexeyVik

Программист mql4 mql5
Мужики еще одна проблемка !
помогите решить )
линию в будущее рисует а вот объект арров с кодом 89 не хочет , дальше 0 бара ни в какую :disappointed:
int Ris(int xxx,string text)
{
time = Time[i0-xxx];
price=iHigh(Symbol(),PERIOD_D1,2);
ObjectSet( "LineW",OBJPROP_TIME1,time);
ObjectSet( "LineW",OBJPROP_PRICE1,price);
ObjectSetText("LineW",text,12,"Arial",Blue);

return(0);
}
Больше я не оставляю твой код под спойлером.
Так не получится. Здесь надо посчитать время открытия будущего бара.
time = Time[0] + Period() * xxx * 60;
Или вместо Period() можно не текущий, а конкретный PERIOD_xx
 

Tsar

Элитный участник
Добрый день. Только недавно создал свой скрипт и появилась мысль стать учителем

Если кому то будет интересно изучать MQL4 с самых азов и делится опытом, то прошу написать что то в теме чтобы я знал кого учу и или оно вообще кому то надо


Dear eevviill & Coders,

I found better editor for MQL4 Program's in

_http://code.google.com/p/scite-ru/



It's FREE !


Hopefully useful... :chao:
 
Последнее редактирование модератором:

matro3

Почетный гражданин
Вот проблема:
Индикатор GG-TrendBar (_http://codebase.mql4.com/5599) не использует буфера.
Как вынуть из него значения? iCustom? понятное дело, не работает...
 
Последнее редактирование модератором:

Ugar

Гуру форума
Вот проблема:
Индикатор GG-TrendBar (_http://codebase.mql4.com/5599) не использует буфера.
Как вынуть из него значения? iCustom? понятное дело, не работает...
1. повесить индикатор вручную на график. Советником обнаруживать объекты индикатора и определять их свойства. В зависимости от состояния объектов советник выполняет действия. Этот советник не будет работать в тестере.
2. Внести изменения в код индикатора так что бы состояние он писал в глобальные переменные. Советник считывает их значения и выполняет действия. Этот советник не будет работать в тестере.
3. Алгоритм работы индикатора прописать в советнике. Но вместо объектов советник выполняет действия. Этот советник будет работать в тестере.
 

AlexeyVik

Программист mql4 mql5
И 4-тый вариант: В индикатор, где if(IndVal[y-1]== !!! добавить заполнение массивов и потом их считывать iCustom().
 
  • Like
Реакции: Dom

matro3

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

Ugar

Гуру форума
Я так и сделал, только в тестере дежил и он дает сигналы отличные от показаний самого индикатора.
Так что перенес все махинации из индюка в сову.
Почему этот индюк не будет работать адекватно в тестере?
И да, может есть ему хорошая замена? Спасибо.
Он использует стандартные индикаторы на разных тайм фреймах и текущем баре. На текущем баре тестер моделирует движение цены внутри бара только на текущем тайм фрейме. На остальных берёт целые бары из файлов историй.
 

77павел

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

eevviill

Заблокирован
Здравствуйте уважаемые программисты подскажите пожалуйста как мне посчитать скорость изменения цены на да пунктов в секунду что то не доходит до меня спасибо Вам .
Я не понимаю, почему именно в эту тему заходить и задавать вопросы по MQL4(не только к тебе)? Есть тема
http://forexsystemsru.com/yazyk-programmirovaniya-mql4/65289-voprosy-po-mql4.html

Ответ на вопрос в коде
http://forexsystemsru.com/sovetniki/71098-sovetnik-tica-3.html#post591142
 

Milord

Местный знаток
Сегодня будем учится применять трейлинг стоп. Может кто не знает, то это подтягивание СЛ после определённого количества пунктов в+.

Трейлинг стоп.
PHP:
int TrailingStop = 10;
 
1)OrderSelect(0,SELECT_BY_POS);
2)if(OrderMagicNumber()==Magic) 
 {
3)if(OrderType()==OP_BUY && Bid-OrderOpenPrice()>TrailingStop*Point && OrderStopLoss()<Bid-TrailingStop*Point) OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);
if(OrderType()==OP_SELL && OrderOpenPrice()-Ask>TrailingStop*Point && OrderStopLoss()>Ask+TrailingStop*Point) OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Blue);
 }
4)OrderModify();

Пояснение.
1)Для начала выбираем ордер с которым будем работать.
2)Проверяем ордер на меджик.
3)Здесь указываем условие трейлинга для ордера бай.
3.1)OrderType()==OP_BUY проверяем тип открытого ордера.
3.2)Bid-OrderOpenPrice()>TrailingStop*Point текущая цена-цена открытия ордера>количество пунктов трейлинга.
3.3)OrderStopLoss()<Bid-TrailingStop*Point стоп лос ордера<текущая цена-количество пунктов трейлинга.
4)OrderModify(); функция модификации ордера(СЛ,ТП,цена отложенного ордера).
Уважаемый eevviill, не могли бы вы привести пример кода с пояснениями, но с 3-мя параметрами:
TrailingStart
TrailingStep
TrailingStop

Также хотелось бы увидеть код перевода ордеров в безубыток, тоже с пояснениями?
ЗАРАНЕЕ СПАСИБО!
P.S. не закрывайте эту ветку,она многим начинающим и опытным нужна, другое дело что мало кто про нее знает...
 
Последнее редактирование:

Milord

Местный знаток
Уважаемый eevviill, уточните???

Ошибочка вышла и у меня и у вас.
Думаю так пойдёт. Будет удалять отложеные ордера байлимит открытые вручную.

#property copyright ""
#property show_inputs
extern int Magic = 0;

int start()
{
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if(OrderMagicNumber()== Magic);
if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());
return(0);
}
}
еще вопрос по коду, было все ясно пока видел такие строчки:
PHP:
if (OrderType()==OP_BUY
if (OrderType()==OP_SELL
но когда увидел в чужом коде вот так, то вапще чуть не выпал в осадок:not-good:)) что это означает???
PHP:
if (OrderType() <= OP_SELL
 
Последнее редактирование:

eevviill

Заблокирован
еще вопрос по коду, было все ясно пока видел такие строчки:
PHP:
if (OrderType()==OP_BUY
if (OrderType()==OP_SELL
но когда увидел в чужом коде вот так, то вапще чуть не выпал в осадок:not-good:)) что это означает???
PHP:
if (OrderType() <= OP_SELL
Что уточнять?

По второму вопросу. Клацни на OP_SELL и нажми кнопку f1
 

Milord

Местный знаток
Что уточнять?

По второму вопросу. Клацни на OP_SELL и нажми кнопку f1

))при чем тут OP_SELL, я в курсе что он делает, мне непонятно как можно писать знаки<=OP_SELL,разве можно написать вот так:
вода<воздуха:D

P.S. а первый вопрос на счет трала вы проигнорили, будто его и не читали...:facepalm:
наверно у вас пропало желание учить языку и отвечать на вопросы...жаль!
 

eevviill

Заблокирован
))при чем тут OP_SELL, я в курсе что он делает, мне непонятно как можно писать знаки<=OP_SELL,разве можно написать вот так:
вода<воздуха:D

P.S. а первый вопрос на счет трала вы проигнорили, будто его и не читали...:facepalm:
наверно у вас пропало желание учить языку и отвечать на вопросы...жаль!
А вот ты клацни как я сказал, потом скажешь понятней стало или нет.
 

eevviill

Заблокирован
да, кое что прояснилось спасибо))
то есть строка
if(OrderType()<=OP_SELL)
эквивалентна строкe
if(OrderType()==OP_SELL||OrderType()==OP_BUY)
так да?)
Да.
Но я согласен что програмировать и так тяжело, а тут ещё пишут замысловато.
 
Верх