Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1077

 

Boa tarde,

Você pode me dizer como posso administrar uma EAem vps sem re-sincronização?

Quero dizer: no terminal eu posso colocar botões na tabela e mudar o modo sem re-sincronizar. Posso usar o bot para dar comandos à EA no PPC ?

Ou devo usar outra alternativa para mudar o modo EA no mql vps sem re-sync?


Obrigado pela resposta!

 

Olá, caros especialistas!

Por favor, ajude-me a resolver este problema.

Ao testar qualquer par, tudo funciona corretamente, mas ao trabalhar com outras moedas, as ordens pendentes não são colocadas (tenho que expor a ordem pendente) e não são fechadas depois de ter sido feito o disparo do lucro.

Favor aconselhar como alterar o código, se possível:

bool operation=0;for(int pos=0;pos<OrdersTotal();pos++)
     {if ( OrderSelect (pos, SELECT_BY_POS) == false )  continue;
      if ( OrderSymbol()==Symbol()) break;}


//=========================================================================================================
if(Hour()>=2&&Hour()<=18&&operation==0){
if(OPB1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)
        {OrderSend(Symbol(),OP_BUY,lots,Ask,0,Bid-ss*Point,Ask+T*Point,"My order#",mn,0,Green);}}
        if (OrderType()==OP_BUY &&OrdersTotal()==1&&OrderMagicNumber()==8)
        {OrderSend(Symbol(),OP_SELLSTOP,5*lots,OrderOpenPrice()-(ss-ss/4)*Point,0,0,SstopClose,"My order#",80,0,Red);}
       

if(OPS1==1)
   {operation=1;if(operation==0 &&OrderSymbol()!=Symbol()||OrdersTotal()==0)        
         {OrderSend(Symbol(),OP_SELL,lots,Bid,0,Ask+ss*Point,Bid-T*Point,"My order#",mn,0,Red);}}
         if (OrderType()==OP_SELL &&OrdersTotal()==1&&OrderMagicNumber()==8)
         {OrderSend(Symbol(),OP_BUYSTOP,5*lots,OrderOpenPrice()+(ss-ss/4)*Point,0,0,BstopClose,"My order#",80,0,Green);}}



if(OrderMagicNumber()==80){operation=0;
 {for( int  ii=OrdersTotal()-1;ii>=0;ii--)
       {OrderSelect(ii, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break;
         
          result = OrderDelete( OrderTicket() );//break;
          }}}}
 

Boa tarde Prezados usuários do fórum.

Por favor, ajude-me a melhorar o indicador que constrói as zonas no gráfico.

No indicador atual, as zonas são definidas para todos os dias da semana.

Preciso ser capaz de definir zonas para cada dia da semana separadamente.

//+------------------------------------------------------------------+
//|                                            2 ЗОНЫ.mq4            |
//|                                                                  |
//|                                                                  |
//|                                                                  |
//|  2017                                                            |
//+------------------------------------------------------------------+

#property indicator_chart_window

//------- Внешние параметры индикатора -------------------------------
extern int    NumberOfDays = 150;        // Количество дней
extern string Begin_1      = "03:00";
extern string End_1        = "08:00";
extern color  Color_1      = PowderBlue;
extern string Begin_2      = "09:00";
extern string End_2        = "16:30";
extern color  Color_2      = Yellow;
extern bool   HighRange    = true;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void init() {
  DeleteObjects();
  for (int i=0; i<NumberOfDays; i++) {
    CreateObjects("PWT1"+i, Color_1);
    CreateObjects("PWT2"+i, Color_2);
  }
  Comment("");
}

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void deinit() {
  DeleteObjects();
  Comment("");
}

//+------------------------------------------------------------------+
//| Создание объектов индикатора                                     |
//| Параметры:                                                       |
//|   no - наименование объекта                                      |
//|   cl - цвет объекта                                              |
//+------------------------------------------------------------------+
void CreateObjects(string no, color cl) {
  ObjectCreate(no, OBJ_RECTANGLE, 0, 0,0, 0,0);
  ObjectSet(no, OBJPROP_STYLE, STYLE_SOLID);
  ObjectSet(no, OBJPROP_COLOR, cl);
  ObjectSet(no, OBJPROP_BACK, True);
}

//+------------------------------------------------------------------+
//| Удаление объектов индикатора                                     |
//+------------------------------------------------------------------+
void DeleteObjects() {
  for (int i=0; i<NumberOfDays; i++) {
    ObjectDelete("PWT1"+i);
    ObjectDelete("PWT2"+i);
  }
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
void start() {
  datetime dt=CurTime();

  for (int i=0; i<NumberOfDays; i++) {
    DrawObjects(dt, "PWT1"+i, Begin_1, End_1);
    DrawObjects(dt, "PWT2"+i, Begin_2, End_2);
    dt=decDateTradeDay(dt);
    while (TimeDayOfWeek(dt)>5) dt=decDateTradeDay(dt);
  }
}

//+------------------------------------------------------------------+
//| Прорисовка объектов на графике                                   |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//|   no - наименование объекта                                      |
//|   tb - время начала сессии                                       |
//|   te - время окончания сессии                                    |
//+------------------------------------------------------------------+
void DrawObjects(datetime dt, string no, string tb, string te) {
  datetime t1, t2, t3;
  double   p1, p2, p3;
  int      b1, b2;

  t1=StrToTime(TimeToStr(dt, TIME_DATE)+" "+tb);
  t2=StrToTime(TimeToStr(dt, TIME_DATE)+" "+te);
  t3=StrToTime(TimeToStr(dt, TIME_DATE)+" ""23:00");
  b1=iBarShift(NULL, 0, t1);                            //Поиск бара по времени
  b2=iBarShift(NULL, 0, t2);
  p1=High[iHighest(NULL, PERIOD_M5, MODE_HIGH, b1-b2, b2)];  // 
  p2=Low [iLowest (NULL, PERIOD_M5, MODE_LOW , b1-b2, b2)]; // 
  p3=p2;
  if (!HighRange) {p1=0; p2=2*p2;}
  ObjectSet(no, OBJPROP_TIME1 , t1);
  ObjectSet(no, OBJPROP_PRICE1, p1);
  ObjectSet(no, OBJPROP_TIME2 , t2);
  ObjectSet(no, OBJPROP_PRICE2, p2);
  ObjectSet(no, OBJPROP_TIME2 , t3);
  ObjectSet(no, OBJPROP_PRICE2, p3);
}

//+------------------------------------------------------------------+
//| Уменьшение даты на один торговый день                            |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
  int ty=TimeYear(dt);
  int tm=TimeMonth(dt);
  int td=TimeDay(dt);
  int th=TimeHour(dt);
  int ti=TimeMinute(dt);

  td--;
  if (td==0) {
    tm--;
    if (tm==0) {
      ty--;
      tm=12;
    }
    if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
    if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
    if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
  }
  return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
//+------------------------------------------------------------------+

Arquivos anexados:
2_aqi4.ex4  17 kb
2_mne7.mq4  11 kb
 
Maxim Kuznetsov:

remover as condições "se (OrderTotal()==0)....". - eles estão apenas dizendo: procurar por entradas e abrir novas ordens somente quando não há nenhuma ordem.

Se você quiser evitar abrir um grande pacote de novos pedidos sem tal condição, você deve fornecer condições adicionais. Isto depende de sua estratégia: não abrir uma nova no tempo T da anterior, ou controlar barras ou manter distâncias em pips entre pedidos.

Entendi, obrigado)

 
É possível na MT5 apresentar os resultados da negociação em uma conta real como um gráfico, como você pode ver no testador de estratégia?
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 

Rapazes, especialmente os desenvolvedores, vocês podem me dizer se é possível resolver este problema? A tarefa na foto


 

Boa tarde, o aviso"possível perda de dados devido à conversão do tipo" aparece na variável n no local destacado

// Переводим строку в верхний регистр
string StringUpper(string s) {
  int c, i, k=StringLen(s), n;
  for (i=0; i<k; i++) {
    n=0;
    c=StringGetChar(s, i);
    if (c>96 && c<123) n=c-32;    // a-z -> A-Z
    if (c>223 && c<256) n=c-32;   // а-я -> А-Я
    if (c==184) n=168;            //  ё  ->  Ё
    if (n>0) s=StringSetChar(s, i, n);
  }
  return(s);
}

Você pode me dizer como corrigi-lo?

 
Sergey:

Boa tarde, o aviso"possível perda de dados devido à conversão do tipo" aparece na variável n no local destacado

Você pode me dizer como corrigi-lo?

Ou ushort n=0;

Ou StringSetChar(s, i, (ushort)n);

Mas é melhor usar o StringSetCharacter().

Документация по MQL5: Строковые функции / StringSetCharacter
Документация по MQL5: Строковые функции / StringSetCharacter
  • www.mql5.com
Если значение pos меньше длины строки и значение символьного кода = 0, то строка усекается (но размер буфера, распределенного под строку остается неизменным). Длина строки становится равной значению pos.
 
Este site tem a funcionalidade de adicionar artigos aos favoritos?
Como é feito para os temas.
 

Boa tarde.

Em um Expert Advisor com várias moedas, preciso fechar um pedido pendente contra um lucro quando uma posição aberta é acionada.

Agora mesmo, quando eu fecho uma ordem pendente com lucro, todas as ordens pendentes para todas as moedas são fechadas.

Como posso alterar o código para que somente a ordem pendente relacionada a um par de moedas seja fechada e o resto das ordens pendentes permaneçam abertas?

O que devo mudar neste código?

if(OrderMagicNumber()==Mn){operation=0;
 {for( int  i=OrdersTotal()-1;i>=0;i--)
       {OrderSelect(i, SELECT_BY_POS);
        int  type   = OrderType();bool result = false;
        switch(type)
         {case OP_BUYSTOP   : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );//break;
          case OP_SELLSTOP  : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); //break; 
          
          result = OrderDelete( OrderTicket() );//break;
          }}}}

Mn neste código é um número mágico de uma ordem pendente BUY_STOP ou SELL_STOP.

A lógica é que quando uma posição aberta é fechada no Take Profit, este número mágico é deixado e o comando para apagá-lo é suposto ser executado.

Isto funciona ao testar cada par. Entretanto, quando se trabalha com outras moedas, todos os pedidos feitos em todos os pares são excluídos.

Ajude, por favor, quem é capaz de fazer isso.

Entendo que ninguém tem que se preocupar com este problema, mas talvez alguém tenha um modelo pronto?

Eu ficaria muito grato.

Razão: