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

 
sibiriyak73:

Onde está o erro?

Se há muitos caracteres, então há muitos "abertos".

struct Orders
   {
   string symbol;
   bool open;
   } orders[];

int OnInit()
   {
   ArrayResize(orders,2);
   orders[0].symbol="EURUSD";
   orders[0].open=false;
   orders[1].symbol="USDJPY";
   orders[1].open=false;
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   for(int i=0; i<2; i++)
      {
      if(!orders[i].open)
         {
         int ticket1=OrderSend(orders[i].symbol,OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
         orders[i].open=true;
         }
      }
........


 
Aleksei Stepanenko:

Se há muitos caracteres, então há muitos "abertos".

Obrigado, amigo. Como faço para uma transação por dia para rasgar o instrumento atual e desconsiderar outros instrumentos (a EA está em vários instrumentos)
 
sibiriyak73:
Obrigado, amigo. Como fazer um comércio por dia para rasgar o símbolo atual e desconsiderar outros instrumentos (o conselheiro fica em vários símbolos)

- olhar no histórico da ordem por seu número mágico e símbolo, se a hora de abertura (ou fechamento?) a ordem corresponde à data atual, então saia OnTick()

- controlar a "nova barra" na TF D1


a primeira maneira - mais escrita, mas no testador, o MT4 funcionará muito rápido; a segunda maneira - 3 linhas de código, mas no testador "mastigará" o disco rígido e o tempo de teste será maior

 
sibiriyak73:
(a EA está em vários instrumentos)

Ah, eu acho que entendo, se você tem um EA em pé em vários instrumentos, então você só precisa acrescentar um cheque de que a ordem pertence ao EA.

int OPEN=1;

int total=OrdersTotal();
for(int i=0; i<total; i++)
   {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
      {
      OPEN=0;
      break;
      }
   }

if(OPEN==1)
   {
   int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
   }
 
Aleksei Stepanenko:

Ah, eu acho que entendo, se você tem uma EA em múltiplos instrumentos, então você só precisa acrescentar um cheque de que a ordem pertence à EA.

Este código abre um grande número de acordos. A idéia é correta, mas como implementá-la corretamente.

 
sibiriyak73:

Este código abre um grande número de negócios. A idéia é correta, mas como implementá-la corretamente.

Você precisa disto

Função isTradeToDay().

Esta função retorna a bandeira comercial para hoje

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

O que você pode adivinhar a partir de um pedaço de código aqui?

Faça uma verificação, não mais que uma vez por dia.

datetime last_time=0;   
MqlDateTime date1, date2; 

void OnTick()
   {
   int OPEN=1;

   int total=OrdersTotal();
   for(int i=0; i<total; i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
         {
         OPEN=0;
         break;
         }
      }
      
   TimeToStruct(last_time,date1);
   TimeToStruct(iTime(Symbol(),0,0),date2);
   if(date1.day==date2.day)
      {
      OPEN=0;
      }

   if(OPEN==1)
      {

      int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
      if(ticket1>=0 && OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES))
         {
         last_time=OrderOpenTime();
         }
      }

 
sibiriyak73:

Os caras ajudam no assessor precisam abrir um negócio por dia NA FERRAMENTA.

Você poderia tentar isto

datetime dt = iTime(_Symbol,PERIOD_D1,0);

   for(int i = 0; i < OrdersHistoryTotal(); i++) 
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
       if((OrderSymbol() != _Symbol) && (dt < OrderCloseTime())
        {
         Открываем ордер;
        }
      }
    }
 
MakarFX:

Você poderia tentar isto.

Tudo escrito há muito tempo ... há muito tempo.

Este código verifica o que já está no mercado e o que está na história no caso de já estar fechado hoje.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг торгов сегодня.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isTradeToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
 
Aleksei Stepanenko:

O que você pode adivinhar a partir de um pedaço de código aqui?

Faça uma verificação, não mais que uma vez por dia.

Saudações. O problema é que se a EA vê uma negociação aberta na conta, ela não abre mais nenhuma negociação. É como "você tem negócios abertos em sua conta por que você quer que eu faça isso". Tenho que explicar-lhe que não se deve abrir mais de uma negociação nesta FERRAMENTA(EUR USD, por exemplo) porque esta EA está aberta em poucos símbolos. Eu acho que seria errado mostrar todo código (é um grande código com variáveis declaradas, etc.).