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

  • Автор темы Автор темы eevviill
  • Дата начала Дата начала
Мужики еще одна проблемка !
помогите решить )
линию в будущее рисует а вот объект арров с кодом 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);
}
 
Мужики еще одна проблемка !
помогите решить )
линию в будущее рисует а вот объект арров с кодом 89 не хочет , дальше 0 бара ни в какую :disappointed:
...
Ты лучше фото скинь. И код как ты делаешь кусок а не весь.
И ветка есть вопросы по mql4.
 
Мужики еще одна проблемка !
помогите решить )
линию в будущее рисует а вот объект арров с кодом 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
 
Добрый день. Только недавно создал свой скрипт и появилась мысль стать учителем

Если кому то будет интересно изучать 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:
 
Последнее редактирование модератором:
Вот проблема:
Индикатор GG-TrendBar (_http://codebase.mql4.com/5599) не использует буфера.
Как вынуть из него значения? iCustom? понятное дело, не работает...
 
Последнее редактирование модератором:
Вот проблема:
Индикатор GG-TrendBar (_http://codebase.mql4.com/5599) не использует буфера.
Как вынуть из него значения? iCustom? понятное дело, не работает...
1. повесить индикатор вручную на график. Советником обнаруживать объекты индикатора и определять их свойства. В зависимости от состояния объектов советник выполняет действия. Этот советник не будет работать в тестере.
2. Внести изменения в код индикатора так что бы состояние он писал в глобальные переменные. Советник считывает их значения и выполняет действия. Этот советник не будет работать в тестере.
3. Алгоритм работы индикатора прописать в советнике. Но вместо объектов советник выполняет действия. Этот советник будет работать в тестере.
 
И 4-тый вариант: В индикатор, где if(IndVal[y-1]== !!! добавить заполнение массивов и потом их считывать iCustom().
 
  • Like
Реакции: Dom
Я так и сделал, только в тестере дежил и он дает сигналы отличные от показаний самого индикатора.
Так что перенес все махинации из индюка в сову.
Почему этот индюк не будет работать адекватно в тестере?
И да, может есть ему хорошая замена? Спасибо.
 
Я так и сделал, только в тестере дежил и он дает сигналы отличные от показаний самого индикатора.
Так что перенес все махинации из индюка в сову.
Почему этот индюк не будет работать адекватно в тестере?
И да, может есть ему хорошая замена? Спасибо.
Он использует стандартные индикаторы на разных тайм фреймах и текущем баре. На текущем баре тестер моделирует движение цены внутри бара только на текущем тайм фрейме. На остальных берёт целые бары из файлов историй.
 
Здравствуйте уважаемые программисты подскажите пожалуйста как мне посчитать скорость изменения цены на да пунктов в секунду что то не доходит до меня спасибо Вам .
 
Здравствуйте уважаемые программисты подскажите пожалуйста как мне посчитать скорость изменения цены на да пунктов в секунду что то не доходит до меня спасибо Вам .
Я не понимаю, почему именно в эту тему заходить и задавать вопросы по MQL4(не только к тебе)? Есть тема
http://forexsystemsru.com/yazyk-programmirovaniya-mql4/65289-voprosy-po-mql4.html

Ответ на вопрос в коде
http://forexsystemsru.com/sovetniki/71098-sovetnik-tica-3.html#post591142
 
Сегодня будем учится применять трейлинг стоп. Может кто не знает, то это подтягивание СЛ после определённого количества пунктов в+.

Трейлинг стоп.
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. не закрывайте эту ветку,она многим начинающим и опытным нужна, другое дело что мало кто про нее знает...
 
Последнее редактирование:
Уважаемый 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
 
Последнее редактирование:
еще вопрос по коду, было все ясно пока видел такие строчки:
PHP:
if (OrderType()==OP_BUY
if (OrderType()==OP_SELL
но когда увидел в чужом коде вот так, то вапще чуть не выпал в осадок:not-good:)) что это означает???
PHP:
if (OrderType() <= OP_SELL
Что уточнять?

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

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

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

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

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