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

Milord

Местный знаток
Улыбнули))

Я вот никогда не считал, что "две головы лучше", просто с моей невнимательностью одному работать нельзя.
Я тут нарисовал классный советник, но почему-то он, падла, больше 30% в месяц не хочет зарабатывать, хотя ясно, что можно рубить капусту в больших количествах. Наверное, еще где-то у меня такие же глюки закрались, а я и не знаю :D
на мой взгляд написание кода советника открывает многие вещи, когда думал что черное, оно оказалось белым, и наоборот...всякая теория проверяется практикой..:facepalm:
даже если ТС написана и подписана известными трейдерами и теоретиками Forex...
 

Milord

Местный знаток
какой билд последний???

дык, на mql4.com, больше некуда!Там метакватовские представители бывают хотя бы и есть ветки по всяким модернизациям. Кстати, они 529 версию запилили "с новым компилятором", не успел ты :)

Там некий модератор Renat отвечает как представитель МТ
извиняюсь, не понял на счет 529 билда, его выпустили или забраковали?
поясните плиз значение слова "запилили"?))
 

ansol

Местный знаток
извиняюсь, не понял на счет 529 билда, его выпустили или забраковали?
поясните плиз значение слова "запилили"?))

В гугл по словосочетанию "дверь мне запили!" :D

Тестируют версию МТ4 с компилятором от МТ5, вернее, принципы МТ5 и некоторые фишки от него же. Текущая версия для тестеров 559, кажись, постоянно что-то допиливают ;) и номер версии подкручивают, но в любом случае, скоро весь этот бардак на головы программистов обвалится, а кто не шарит в программировании, будет курить бамбук до адаптации любимого сова к новым реалиям. оО
 

ansol

Местный знаток
Обсуждение уже на 91 странице _http://forum.mql4.com/ru/58760/page91
 
Последнее редактирование модератором:

Milord

Местный знаток
маленькое уточнение..)

Ну это я так, с разгону :)
Bid - цена покупки, именно ей оперируют все индюки и даже часто кривые советники. Между тем есть еще цена Ask - для продажи.
Если у вас на покупку Buy все верно, а на Sell неправильно, то возникает предположение, что не та цена используется. Вот и все.
Пардон, что влез, счас более вумные люди подскажут, но код надо поковырять и спрашивать по MQL4, а не "почему у меня не работает" ;)
извините, хочу уточнить вашу мысль, в справке MQL4 читаем:
PHP:
double Bid
Последняя известная цена покупки (предложение на покупку) текущего инструмента. Для обновления необходимо использовать функцию RefreshRates().
См. также MarketInfo(). 
Пример:
  if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
    {
     OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,
               "Мой заказ #2",3,D'2005.10.10 12:30',Red);
     return(0);
    }

PHP:
double Ask
Последняя известная цена продажи (запрашиваемая цена) текущего инструмента. Для обновления необходимо использовать функцию RefreshRates().
См. также MarketInfo(). 
Пример:
  if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
    {
     OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,
               "Order Buy #2",3,D'2005.10.10 12:30',Red);
     return;
    }
обратите внимание что ордер BUY открывается по Ask, а ордер SELL по Bid,то есть спред уходит брокеру, через которого мы работаем...
 
Последнее редактирование модератором:

matro3

Почетный гражданин
При тесте советника в журнал валятся такие сообщения в бесчисленном кол-ве
PHP:
дата и время FastTMALine EURUSD,M5: removed
дата и время FastTMALine EURUSD,M5: loaded successfully
Видимо так и надо, но можно ли убрать подобные сообщения?
Не удобно дебажить советник.
 

eevviill

Заблокирован
При тесте советника в журнал валятся такие сообщения в бесчисленном кол-ве
PHP:
дата и время FastTMALine EURUSD,M5: removed
дата и время FastTMALine EURUSD,M5: loaded successfully
Видимо так и надо, но можно ли убрать подобные сообщения?
Не удобно дебажить советник.
По моему это когда ты вызываешь пользовательский индикатор, который в свою очередь вызывает ещё один пользовательский индикатор.
 

matro3

Почетный гражданин
Здравствуйте. Прошу помочь в одном вопросе. Как добавить функция в советник, чтобы после получения стоп-лосса, сов не спешил открывать сделки, а ждал какое-нибудь заданное время. А то часто бывает стоп получен и тут же сов ставит снова ордер и снова стоп получает, и так раза по 3-4 подряд, когда сильная коррекция идет.

Нашел похожее решение у Кима:
PHP:
int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) {
   datetime oot;
   int      i, k=OrdersTotal();
 
      for (i=0; i<k; i++)
      {
         if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
            if (OrderSymbol()==sym)
               if (OrderType()==OP_BUY || OrderType()==OP_SELL)
                  if (op<0 || OrderType()==op)
                     if (mn<0 || OrderMagicNumber()==mn)
                        if (oot<OrderOpenTime()) oot=OrderCloseTime();
      }
   }
   return(iBarShift(sym, tf, oot, True));
}

ворачичает больше ноля - значит это следующий бар
 

Dobryj

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


PHP:
// Готовим массив с размерами колонок
   int ColWidth[]={9};
   string Content[];   // количество строк
if(full_version==true)
{Content[85];}
else
{Content[40];}
что то вроде этого
 
Последнее редактирование:

eevviill

Заблокирован
eevviill прошу опять о помощи ни как не могу прописать ту логику которая нужна ...
надо поменять значение в текстовом массиве ни как не получается


PHP:
// Готовим массив с размерами колонок
   int ColWidth[]={9};
   string Content[];   // количество строк
if(full_version==true)
{Content[85];}
else
{Content[40];}
что то вроде этого
Чтобы поменять надо написать например Content[1]="hgft";
Это значит что в 2-ую по порядку ячейку записано значение "hgft"
 

Чико

Почетный гражданин
1. Можно пропускать пипсы, т.е. подождать пока цена отползет на N*Point
2. Можно пропускать тики, т.е. подождать, пока пройдет N тиков по значению Volume()
3. можно просто "заморозить" сову на несколько (милли)секунд Sleep()

Ммм?

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

extern int delta_tm=60; //задаваемый интервал (60 секунд)
//----------------------------------------------------------------------
int tm0=TimeCurrent(); //запись времени закрытия ордера
//----------------------------------------------------------------------
int tm1=TimeCurrent(); //проверка текущего времени
if((tm1-tm0)<delta_tm))
return(0);
 
Последнее редактирование:

ansol

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

Так выше чел отписался - его устраивает открытие на следующей свече, все просто, правда, кимовский уродский код не вполне отвечает этой идее, но главное - результат! ;)
 

Dobryj

Почетный гражданин
Чтобы поменять надо написать например Content[1]="hgft";
Это значит что в 2-ую по порядку ячейку записано значение "hgft"

Спасибо но немного не то , это функция отвечает за количество нарисованных строк в таблице, количество в массиве Content[]
и есть число строк ,как его поменять с Content[85]на Content[40]
при
bool int A=true;
если так как вы написали прописывать значения по новому адресу , все равно остануться пустые строки таблицы ...
 
Последнее редактирование:

eevviill

Заблокирован
Спасибо но немного не то , это функция отвечает за количество нарисованных строк в таблице, количество в массиве Content[]
и есть число строк ,как его поменять с Content[85]на Content[40]
при
bool int A=true;
если так как вы написали прописывать значения по новому адресу , все равно остануться пустые строки таблицы ...
А.
PHP:
ArrayResize(Content,40);
 

Milord

Местный знаток
Как закрыть все ордера???

Подскажите профи MQL4, как закрыть все ордера на счете, не важно какой у них профит положительный или отрицательный,неважно BUY или SELL???
желателен код покороче, и с пояснениями логики работы...
ЗАРАНЕЕ СПАСИБО!
например:
PHP:
int start()
{
RefreshRates();
if(OrdersTotal()<MaxOrders)
  { 
    if(A>B)  
     {   
     OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"",Magic,0,OrangeRed);
     }

  if(t>P)
  //закрываем все ордера
   {.....}

  }
return(0);
}
 
Последнее редактирование:

eevviill

Заблокирован
Подскажите профи MQL4, как закрыть все ордера на счете, не важно какой у них профит положительный или отрицательный,неважно BUY или SELL???
желателен код покороче, и с пояснениями логики работы...
ЗАРАНЕЕ СПАСИБО!
например:
PHP:
int start()
{ 
 if(A>B)  
  {
   OrderSend(.... );
  }

  if(t>P)
  //закрываем все ордера
   {.....}

return(0);
}
PHP:
////////////////////////////////////////////////////////////////////////////////
void Close_all()
{
for(int i=OrdersTotal()-1; i>=0; i--)
 {
 if(OrderSelect(i, SELECT_BY_POS))
 {
 if(OrderMagicNumber()==magic)
 {
 if(OrderSymbol()==Symbol())
 {
 bool ticket_ex=false;
 for (int j_ex = 0;j_ex < MaxAttempts; j_ex++)
 {
 while(IsTradeContextBusy()) Sleep(pause_if_busy*1000);
 RefreshRates();
 
 if(OrderType()==OP_BUY ) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,Yellow); 
 if(OrderType()==OP_SELL) ticket_ex=OrderClose(OrderTicket(),OrderLots(),Ask,slippage,Yellow);
 if(OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYLIMIT) ticket_ex=OrderDelete(OrderTicket(),CLR_NONE);
 if(ticket_ex==true)break;
 }
 }
 }
 }
 }
 
}
 
Верх