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

 
Alexey Viktorov:

corda AUDUSD = "AUDUSD";

Pelo menos assim.

É isso aí!!! Assim foi para mim)))), apagado e esquecido)))

Muito obrigado!!!! Paz em sua casa!

 
Valeriy Yastremskiy:

Consultor especializado, roteiro, indicador não são acessados, mas funcionam na janela atual. E as variáveis globais de diferentes janelas/gráficos não se sobrepõem. Portanto, deve funcionar)

Esta é uma variável de texto, além de estar inicialmente vazia, ou seja, igual a "".

(Symbol() == AUDUSD) // esta string não tem nada a ver com a variável AUDUSD.

Mas o critério de abertura do pedido não deve ser o mesmo para instrumentos/janelas diferentes. Se eles forem os mesmos, ele de fato se abrirá em todas as janelas.

Obrigado!

Eu implementei a lógica para que o Expert Advisor não conseguisse o sinal para abrir pedidos quando eles abrem em várias janelas e entendesse que o sinal de compra era dado para tal símbolo para que a EA não interferisse com outros.

 
Denis Diakonov:

Aí está!!! Assim foi para mim)))), apagado e esquecido)))

Muito obrigado!!!! Paz em sua casa!

Ou assim em um nível variável global

#define  AUDUSD "AUDUSD"
 
Alexey Viktorov:

Ou assim, em nível variável global

Na verdade é legal))) Agora o robô recebe um sinal e abre pedidos em diferentes pares em várias janelas ao mesmo tempo))

Mais uma vez, obrigado!

 
Yerkin Sagandykov:

O problema não está nos valores da variável, na minha opinião. Eu apenas tenho em meu código uulsovii recálculo na ocorrência de uma nova hora. e acontece que o símbolo atual aparece nova barra e calculou o valor de barra = 1, mas o símbolo do sinal é uma nova barra ainda não foi formada ou se e valores calculados para barra = 2

O problema é resolvido facilmente - eu apenas rastreei o início de uma nova barra pelo símbolo do sinal

 if  ( iTime(nameSym, LPeriod, 0 ) == counted_bar || iTime(nameSymSignal, LPeriod, 0 ) == counted_Signalbar) return; 
 
Por favor, me dê uma dica.
É possível passar vários parâmetros de caixas de interruptores do corpo da função? Tenho tipos de ordens a serem abertas em caso de interruptor e consegui passar apenas 1 parâmetro para abrir uma ordem a partir da função que define o ponto de entrada no mercado, como já entendi que é impossível, por isso não sei como implementá-la mesmo seqüencialmente
 
Denis Diakonov:
Por favor, informe.
É possível passar vários parâmetros de caixas de interruptores do corpo da função? Tenho tipos de ordens a serem abertas em caso de interruptor e consegui passar apenas 1 parâmetro para abrir uma ordem da função que define o ponto de entrada no mercado, como já entendi que é impossível, então ainda não sei como implementá-la, mesmo seqüencialmente

Por favor, mostre-me no código o que exatamente lhe interessa

 
Denis Diakonov:
Por favor, informe.
É possível passar vários parâmetros de caixas de interruptores do corpo da função? Tenho tipos de ordens a serem abertas em caso de interruptor e consegui passar apenas 1 parâmetro para abrir uma ordem a partir da função que define o ponto de entrada no mercado, como já entendi que é impossível, por isso não sei como implementá-la mesmo seqüencialmente

Você está se referindo a uma gama de valores?

 
Vitaly Muzichenko:

Mostre o código exatamente no que você está interessado

int OpenOrder()                                             
{
   switch(AUDUSD_Analizing)
   {
      case 0 : Alert("Нет условий для открытия ордера. Выход"); break;    
      case 1 : // кейс для открытия Buy по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_BUY,lot,Ask,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
      case 2 : // кейс для открытия Sell по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_SELL,lot,Bid,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
//-------------------------------------------------------------------------------------------------------------
// другая функция
//-------------------------------------------------------------------------------------------------------------

int AUDUSD_Analizing()
{    
   if(AUDUSD_Prices_new > AUDUSD_Prices_old)
   {
      s1 = AUDUSD_Prices1;
      s2 = AUDUSD_Prices2;
      s3 = s1 - s2;    
      if(raznica > s5)
      {
         Alert("--- ВРЕМЯ ОТКРЫВАТЬ ОРДЕР НА ПОКУПКУ ---");

и вот тут я могу либо прописать конкретное открытие ордера или несколько их штук(чем и решил заняться так 
как не нашел решения), либо вернуть номер кейса в первую функцию(что сократило бы код). 
Но мне нужно по условиям открывать сразу несколько сделок. К примеру нужно 2 на бай разом открыть, 
а возвращается только одно значение и исполняется один кейс и дальше уже на новый круг все идет, 
а мне нужно сразу несколько кейсов, допустим 5 выполнить, поставить 5 отложек и вот как передать не пойму, 
или как вызвать срабатывание кейсов в последовательности. Если с кейсами можно как-то придумать, то по
факту код влезет в рамку 400-600 строк, а так полагаю все 1000+ выйдет в лучшем случае
(разбитые по 100-200 строк на .mqh, но и из файлов тоже помойка сложится)

 
Alexey Viktorov:

Você quer dizer uma gama de valores?

Não, por exemplo, passe primeiro o caso 1, depois o caso 2, etc.

casos executam a abertura de ordens

Razão: