Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 555

 
Alexey Viktorov:

Ho letto questi argomenti. Ma non era una discussione, era solo una mancanza di volontà di capire le spiegazioni e i tentativi di dimostrare la colpa del terminale. Le sue parole non erano supportate da nulla. Sei troppo pigro per fare degli screenshot e spiegare chiaramente i tuoi pensieri.

Quali screenshot?! Ho fornito il codice, funziona su MT4 e si blocca su MT5. Il tipo di errore è scritto nel codice che è anche commentato.
 
comp:
Quali screenshot?! Fornito il codice, funziona su MT4 e si blocca con un errore in MT5. Il tipo di errore è scritto nel codice che è anche commentato.

Va bene. Questo è il suo punto di vista. Pensi che tutti debbano fare qualcosa per capire il tuo punto di vista, ma non pensi che sia più facile non discutere con te, ed è davvero più facile essere bannati per essere troppo esigenti.

Per fortuna non ho il diritto di vietare, quindi mi limito a fermare questo dialogo.

 
Per favore, ditemi perché gli ordini non si aprono
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,Lot,Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,Lot,Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
Per favore, ditemi perché gli ordini non si aprono.
 
edutak:
Per favore, ditemi perché gli ordini non si aprono.

Ho almeno 4 errori

'RSI_uroven1' - identificatore non dichiarato 32.mq4 13 12

'RSI_uroven2' - identificatore non dichiarato 32.mq4 14 12

'RSI' - identificatore non dichiarato 32.mq4 16 24

'pos' - variabile già definita 32.mq4 19 12

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
int RSI=23;
int RSI_uroven1=100;
int RSI_uroven2=100;
int Magic=777;
double Lot=0.1;
void OnTick()
  {
   int pos;
   int rsi;
   int uroven1;
   int uroven2;
   int kolpos;
   uroven1=RSI_uroven1;
   uroven2=RSI_uroven2;

   rsi=iRSI(Symbol(),0,RSI,0,1);

//==================================================================
   for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         kolpos++;

     }
//====================================================================
   if(kolpos==0)
     {
      if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2)
        {
         OrderSend(Symbol(),OP_BUY,NormalizeDouble(Lot,2),Ask,30,0,0,"",Magic,0,clrAliceBlue);
         OrderSend(Symbol(),OP_SELL,NormalizeDouble(Lot,2),Bid,30,0,0,"",Magic,0,clrRed);

        }
     }
  }
//+------------------------------------------------------------------+

все октрывает

1	2015.01.02 09:00	buy	1	0.10	120.42	0.00	0.00	0.00	10000.00
2	2015.01.02 09:00	sell	2	0.10	120.39	0.00	0.00	0.00	10000.00
3	2016.04.04 13:08	close at stop	2	0.10	111.66	0.00	0.00	3.26	10003.26
4	2016.04.04 13:08	close at stop	1	0.10	111.63	0.00	0.00	-11.85	9991.41

 
edutak:
Per favore, ditemi perché gli ordini non si aprono.

Prima di tutto ti ho dato una funzione normale che conta il numero di ordini, ma tu continui ad usare quella sbagliata.

In secondo luogo le condizioni if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) sono reciprocamente contraddittorie.

 
Vitalii Ananev:

Prima di tutto ti ho dato una funzione normale che conta il numero di ordini, ma tu continui ad usare quella sbagliata.

In secondo luogo le condizioni if(rsi>uroven1 || rsi<uroven1 || rsi>uroven2 || rsi<uroven2) sono reciprocamente inconsistenti.

Userò funzioni normali, questa è una bozza per ora, per il tester - copio solo in blocchi, è più veloce così.

Se all'attraversamento dell'RSI di uno qualsiasi dei livelli si apre un ordine, e all'attraversamento di qualsiasi altro livello - si chiude e si apre immediatamente un altro, allora non c'è contraddizione.

O c'è?

 
Vladislav Andruschenko:

Ho almeno 4 errori

'RSI_uroven1' - identificatore non dichiarato 32.mq4 13 12

'RSI_uroven2' - identificatore non dichiarato 32.mq4 14 12

'RSI' - identificatore non dichiarato 32.mq4 16 24

'pos' - variabile già definita 32.mq4 19 12


Grazie, funziona.
 
edutak:

Userò funzioni normali, questo è un abbozzo per ora, per il tester - copio solo in blocchi, è più veloce in questo modo.

Se quando RSI attraversa uno qualsiasi dei livelli si apre un ordine e quando attraversa qualsiasi altro livello si chiude e se ne apre immediatamente un altro, allora non c'è contraddizione.

O c'è?

Pensateci. Supponiamo che uroven1 = 80; rsi = 30; la condizione rsi > 80 o rsi < 80 significa che (30 > 80 [falso] o 30 < 80[vero]) non esiste in natura. Anche se la condizione sarà vera, perché usa un operatore OR, ma è essenzialmente senza significato.

La seconda parte dell'espressione Supponiamo che uroven2 = 20; rsi = 30 (30 > 20 [vero] o 30< 20[falso] ) è la stessa.

 

La seconda parte dell'espressione Supponiamo che uroven2 = 20; rsi = 30 (30 > 20 [vero] o 30< 20[falso] ) è la stessa.

Quando scrivo o, voglio dire che a qualsiasi passaggio di livello, l'ordine sarà aperto. Quando si verifica la seconda condizione 30<20[falso], in quel momento, l'ordine precedente sarà chiuso e diventerà vero.

Se ho capito bene.

 
Se hai ragione, aggiungerò una seconda RSI.
Motivazione: