Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 374

 

Ciao a tutti. aiutare a capire la situazione attuale.

perché in un caso, testF2, quando prendo Buf0[i]=iCCI(NULL,0,8,PRICE_OPEN,i-1)-iCCI(NULL,0,8,PRICE_OPEN,i); tutto avviene alla grande come dovrebbe,

ma in un altro caso, testF1, con le stesse azioni Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i); l'ultima barra è crollata? perché non succede in caso di iCCI ma iMA crolla??????

C'è un modo per risolvere il problema?

File:
testf1.mq4  1 kb
testf2.mq4  1 kb
 

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

per un yem in infinito sarete gettati quando calcolate -1 bar quando i=0

è meglio così:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

e se avete bisogno di uno spostamento come nella variante da voi citata di 1-n bar a destra, meglio implementarlo esplicitamente nell'init tramite SetIndexShift(0,1);

 
ALXIMIKS:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

perché l'yem sia infinito verrà lanciato quando si calcola -1 bar quando i=0

è meglio così:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

e se avete bisogno di uno spostamento come nella variante da voi citata di 1-n bar a destra, meglio implementarlo esplicitamente nell'init tramite SetIndexShift(0,1);



Grazie mille, ma ho capito tutto perfettamente, ma perché va bene con iCCI e non con iMA?
 
       if ((NormalizeDouble(priceopen+start*Point,Digits)<=Bid)&&(NormalizeDouble(Bid-sl*Point,Digits)>NormalizeDouble(dist*Point,Digits)))
         {   
                sl=NormalizeDouble(Bid-dist*Point,Digits); 
Ekburg
:


si calcola la distanza dal prezzo al prezzo di inserimento dell'ordine, e si ha bisogno dal prezzo allo stop attuale)!

Se uno short è in piedi, allora è diretto al primo blocco, se un long è in piedi, allora è diretto al secondo blocco, e poi i trailing stop.

Se i corti sono buoni, allora vanno al primo blocco, se lunghi, allora al secondo, dopo di che i calcoli, i controlli e i trailing stop.


non riesco ancora a farlo... Sto solo provando a lungo, ho provato così tante cose che non riesco a ricordare cosa ho fatto))
 
clubsmi:


Grazie mille, ma ho capito perfettamente, ma perché funziona con iCCI e non con iMA?


Ci sono stati errori qua e là, è solo che con iCCI non è ovvio, a causa delle peculiarità dei calcoli,

e l'applicazione delle MA, in particolare delle EMA, penso che porti alla loro visibilità.

[Eliminato]  
vadynik:

ancora non esce nulla... Sto solo provando a lungo, ho provato così tante cose che non ricordo cosa ho fatto))

mettere OrderStopLoss() invece di sl
 
Vinin:

Hai intenzione di vivere di mance?
Finché non sarò un esperto in questo.
Non hai bisogno di mance ora, vero? :)
 

C'è un programma che apre due ordini di acquisto o vendita, diciamo per EURAUD e AUDUSD. Il programma funziona solo se non ci sono ordini aperti nel terminale per queste o altre coppie. Se nel terminale è presente almeno un ordine, le compravendite non si apriranno. La mia domanda è: come programmare l'apertura degli ordini se ci sono ordini aperti nel terminale o no? Vi ringrazio in anticipo per la vostra risposta.

extern double lotAU=1.3;
extern double lotEA=1.0;
extern double Profit=30;
extern int Operation=0;
extern string Сomment           = "KVAZ";
extern int Magic                = 1111;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo("EURAUD",MODE_BID);
double askEA = MarketInfo("EURAUD",MODE_ASK);
double bidAU = MarketInfo("AUDUSD",MODE_BID);
double askAU = MarketInfo("AUDUSD",MODE_ASK);

string symEA = "EURAUD";
string symAU = "AUDUSD";

for(int i=OrdersTotal()-1; i>=0; i--)
{
 OrderSelect(i,SELECT_BY_POS);
 prof=prof+OrderProfit();
 Print("Profit="+prof);
}
if(prof>=Profit)
{
 for(i=OrdersTotal()-1; i>=0; i--)
 {
  OrderSelect(i,SELECT_BY_POS);
  {
  if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
  OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,0);
  }
 }
}
if(OrdersTotal()==0)
{
 if(Operation==0)
 {
  OrderSend(symEA,OP_BUY,lotEA,askEA,3,0,0,"KVAZ",Magic,0,Blue);
  OrderSend(symAU,OP_BUY,lotAU,askAU,3,0,0,"KVAZ",Magic,0,Blue); 
 }
 if(Operation==1)
 {
  OrderSend(symEA,OP_SELL,lotEA,bidEA,3,0,0,"KVAZ",Magic,0,Red);
  OrderSend(symAU,OP_SELL,lotAU,bidAU,3,0,0,"KVAZ",Magic,0,Red);
 }
}  
   return(0);
  }
 
alexey1979621:

C'è un programma che apre due ordini di acquisto o vendita, diciamo per EURAUD e AUDUSD. Il programma funziona solo se non ci sono ordini aperti nel terminale per queste o altre coppie. Se nel terminale è presente almeno un ordine, le compravendite non si apriranno. La mia domanda è: come programmare l'apertura degli ordini se ci sono ordini aperti nel terminale o no? Vi ringrazio in anticipo per la vostra risposta.


Rimuovere il controllo
if(OrdersTotal()==0)
 
evillive:

Togliere il controllo
Sì, ora lo fa, ma apre un mucchio di trade, mentre io ho bisogno solo di due trade da aprire sulle coppie specificate, diciamo per EURAUD e AUDUSD.