Bisogno di aiuto

 

Il problema è
praticamente non conosco la lingua, ho bisogno di automatizzare l'apertura di ordini per alcuni vp, ho messo fuori questo semplice codice (file allegato), ma si è rivelato essere goffo,
Secondo il piano dovrebbe aprire 6 vp, ma apre solo 3 vp, ma a volte apre tutti e 6, ma poi di nuovo non funziona più come dovrebbe (penso che questo possa essere dovuto al numero di cifre dopo la virgola, come nel blocco, dove non c'è JPY, tutto funziona bene.
Per favore, aiutatemi a risolvere questo problema.
Se non sono duro ho bisogno di più informazioni su come scriverlo, posso cambiare i trade in Buy o Sell solo.

file: PERICOLO FILE CANCELLATO

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

Il problema è
praticamente non conosco la lingua, ho bisogno di automatizzare l'apertura di ordini per alcuni vp, ho messo fuori questo semplice codice (file allegato), ma si è rivelato essere goffo,
Secondo il piano dovrebbe aprire 6 vp, ma apre solo 3 vp, ma a volte apre tutti e 6, ma poi di nuovo smette di funzionare come dovrebbe (penso che questo possa essere dovuto al numero di decimali nel prezzo, come in un blocco senza JPY, tutto funziona bene.
Per favore, aiutatemi a risolvere questo problema.
Se non sono duro ho bisogno di aiuto per scriverlo in modo da poter cambiare le compravendite solo in Buy o Sell.

file: PERICOLO FILE RIMOSSO

Il file deve essere allegato usando il pulsante Allega file.

 
ok
File:
Test_3.mq4  7 kb
 
Sergey Korsunov:

Il problema è
praticamente non conosco il linguaggio, ho bisogno di automatizzare l'apertura di ordini per alcuni vp, ho messo fuori questo semplice codice (file allegato), ma si è rivelato essere goffo,
Secondo il piano dovrebbe aprire 6 vp, ma apre solo 3 vp, ma a volte apre tutti e 6, ma poi di nuovo smette di funzionare come dovrebbe (penso che questo possa essere dovuto al numero di decimali, come in un blocco senza JPY, tutto funziona bene.
Per favore, aiutatemi a risolvere questo problema.
E anche, se non è difficile prompt come prescrivere, che era possibile passare l'apertura di mestieri solo acquistare o vendere.

Ci sono diverse ragioni che ti impediscono di aprire un ordine. Supponiamo che al primo tick vengano aperti 3 ordini

Al prossimo tick, proprio all'inizio del programma, if(OrdersTotal() >= OrderCount) return; questo verrà restituito poiché il numero di ordini è maggiore di OrderCount, che = 1.

Il resto del programma sarà ignorato.

A giudicare da queste righe:

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

Il programma è stato sviluppato da MetaQuotes Software Corp. Chiedete loro un consiglio!

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

Ci sono diverse ragioni che impediscono l'apertura di un ordine. Supponiamo che al primo tick vengano aperti 3 ordini

Al prossimo tick, proprio all'inizio del programma, if(OrdersTotal() >= OrderCount) return; questo verrà restituito poiché il numero di ordini è maggiore di OrderCount, che = 1.

Il resto del programma sarà ignorato.

A giudicare da queste righe:

Il programma è stato sviluppato da MetaQuotes Software Corp.

Vuoi dire che vengono aperti ordini extra?

 
Fast235 #:

vuoi dire che vengono aperti ordini extra?

No, al contrario, hai bisogno di 6 diverse coppie di valute e solo 3 sono aperte

E a proposito, dove non c'è yen bullion, tutte le 6 coppie aperte, sia principali che incrociate, dove c'è uno yen bullion, solo 3 aperte

 
Sergey Korsunov #:

No, al contrario, hai bisogno di 6 diverse coppie di valute e solo 3 sono aperte

Il modo più semplice è mettere Sleep() dopo ogni apertura d'ordine, il terminale non ha il tempo di aggiornare la quantità (per ragioni di performance apparentemente)

 
Fast235 #:

il modo più semplice è mettere Sleep() dopo ogni ordine aperto, il terminale non ha tempo per aggiornare la quantità

Praticamente non capisco il linguaggio (
Ho scritto il mio codice puramente sugli esempi sul web
Aiutatemi a mettere Sleep() nel mio codice

 
Sergey Korsunov #:

Non ho quasi nessuna conoscenza del linguaggio (
ho scritto il codice puramente da esempi sul web
Aiuto inserire Sleep() nel mio codice

Dopo OrderSend e mettere Sleep(50);

se non aiuta 50 aumentare a 100-200

 
Fast235 #:

dopo OrderSend e mettere Sleep(50);

Se non funziona 50 aumentare a 100-200

non ha aiutato ((

 
Sergey Korsunov #:

non ha aiutato ((

Prova in questo modo: più breve e più preciso. Se lo capisci da solo, sarai un corifeo della programmazione. Metti il cursore sulla parola e premi 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);
}
Motivazione: