Precisa de ajuda

 

O problema é
Eu praticamente não conheço o idioma, preciso automatizar a abertura de pedidos para alguns vp, eu coloco este código simples (arquivo anexo), mas acabou sendo desajeitado,
De acordo com o plano deveria abrir 6 vp, mas abre apenas 3 vp, mas às vezes abre todos os 6, mas então novamente não funciona mais como deveria (acho que isso pode ser devido ao número de dígitos após o ponto decimal, como no bloco, onde não há JPY, tudo funciona bem.
Por favor, ajude a resolver este problema.
Se não for difícil, preciso de ajuda para escrevê-lo para que possa trocar de profissão apenas para Comprar ou Vender.

arquivo: ARQUIVO DE PERIGO APAGADO

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Информация об инструменте - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Sergey Korsunov:

O problema é
Eu praticamente não conheço o idioma, preciso automatizar a abertura de pedidos para alguns vp, eu coloco este código simples (arquivo anexo), mas acabou sendo desajeitado,
De acordo com o plano deveria abrir 6 vp, mas abre apenas 3 vp, mas às vezes abre todos os 6, mas então novamente não funciona mais como deveria (acho que isso pode ser devido ao número de dígitos após o ponto decimal, como no bloco, onde não há JPY, tudo funciona bem.
Por favor, ajude a resolver este problema.
Se não for difícil, preciso de ajuda para escrevê-lo para que possa trocar de profissão apenas para Comprar ou Vender.

arquivo: ARQUIVO DE PERIGO REMOVIDO

O arquivo deve ser anexado usando o botão Anexar arquivo.

 
ok
Arquivos anexados:
Test_3.mq4  7 kb
 
Sergey Korsunov:

O problema é
Eu praticamente não conheço o idioma, preciso automatizar a abertura de pedidos para alguns vp, eu coloco este código simples (arquivo anexo), mas acabou sendo desajeitado,
De acordo com o plano deveria abrir 6 vp, mas abre apenas 3 vp, mas às vezes abre todos os 6, mas depois novamente deixa de funcionar como deveria (acho que isso pode ser devido ao número de casas decimais, como em um bloco sem JPY, tudo funciona bem.
Por favor, ajude a resolver este problema.
E também, se não for difícil prescrever de imediato, que foi possível mudar a abertura de comércios apenas Comprar ou Vender.

Há uma série de razões que o impedem de abrir um pedido. Suponha que, no primeiro tick, 3 ordens são abertas

No próximo tick, logo no início do programa, if(OrdersTotal() >= OrderCount) retornará; isto será retornado já que o número de pedidos é maior que OrderCount, que = 1.

O resto do programa será ignorado.

A julgar por estas linhas:

//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"

O programa foi desenvolvido pela MetaQuotes Software Corp. Peça-lhes conselhos!

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
a007 #:

Há uma série de razões que impedem a abertura de uma ordem. Suponha que no primeiro tick, 3 ordens são abertas

No próximo tick, logo no início do programa, if(OrdersTotal() >= OrderCount) retornará; isto será retornado já que o número de ordens é maior que OrderCount, que = 1.

O resto do programa será ignorado.

A julgar por estas linhas:

O programa foi desenvolvido pela MetaQuotes Software Corp. Por favor, consulte-os!

Você quer dizer que são abertas encomendas extras?

 
Fast235 #:

você quer dizer que são abertas encomendas extras?

Não, pelo contrário, você precisa de 6 pares de moedas diferentes e apenas 3 estão abertos

E, a propósito, onde não há nenhum lingote de iene, todos os 6 pares estão abertos, tanto o principal como os cruzados, onde há lingote de iene, apenas 3 estão abertos

 
Sergey Korsunov #:

Não, pelo contrário, você precisa de 6 pares de moedas diferentes e apenas 3 estão abertos

A maneira mais fácil é colocar Sleep() após cada abertura de pedido, o terminal não tem tempo para atualizar a quantidade (por razões de desempenho aparentemente)

 
Fast235 #:

a maneira mais fácil é colocar Sleep() após cada pedido ser aberto, o terminal não tem tempo para atualizar a quantidade

Eu praticamente não entendo o idioma (
Eu escrevi meu código puramente nos exemplos da web
Ajuda-me a colocar Sleep() no meu código

 
Sergey Korsunov #:

Eu quase não tenho conhecimento do idioma (
escreveu o código puramente a partir de exemplos na web
Ajuda inserir Sleep() no meu código

Após o pedidoEnviar e colocar Sleep(50);

se isso não ajudar 50 aumentar para 100-200

 
Fast235 #:

após a encomendaEnviar e colocar Sleep(50);

Se não funcionar 50 aumentam para 100-200

não ajudou ((

 
Sergey Korsunov #:

não ajudou ((

Tente desta forma - mais curto e mais preciso. Se você descobrir por conta própria, você será um coryphaeus da programação. Coloque seu cursor sobre a palavra e pressione F1

//+------------------------------------------------------------------+
//|                                                       Test 3.mq4 |
//+------------------------------------------------------------------+
#property strict

extern double Lot   = 0.01;
extern int    Slip  = 3;
extern int    Magic = 777;

string name[10]={"AUDJPY","CHFJPY","CADJPY","AUDCAD","AUDCHF","CADCHF"};
int    cnt[6];

void OnTick()
{
   ArrayInitialize(cnt, 0); // Обнуление счетчиков

   // Подсчет ордеров по каждому торговому инструменту
   for(int n=OrdersTotal()-1; n>=0; n--)
   {
     if(!OrderSelect(n,SELECT_BY_POS))continue;
     for(int k=0; k<6; k++) if(OrderSymbol()==name[k]) cnt[k]++;
   }

   // Открытие ордеров по каждому торговому инструменту
   for(int k=0; k<6; k++) if(!cnt[k]) int ticket = OrderSend(name[k],OP_BUY, Lot, MarketInfo(name[k],MODE_ASK), Slip, 0, 0, "", Magic);
}
Razão: