[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 46

 
bool exit_for=false;
double max_1=0;
double max_2=0;
for(int k=0; k<Bars; k++)
{
	if(	iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k)<iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)
		&& iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1)>iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+2) 	)
	{
		//Если это первый максимум:
		if( max_1==0)
			max_1=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);//Записываем номер бара экстремума
		else
		//Если первый найден, записываем второй
		{	
                        max_2=iRSI(Symbol(),0, rsi_period,PRICE_CLOSE, k+1);
                        exit_for=true;
                } 
	}
        //Выход из цикла, когда найдены оба максимума
        if( exit_for==true) k=Bars+1;  
}
Buon pomeriggio. Si prega di avvisare. Alla mia domanda sul confronto dei top con RSI dopo che il suo valore supera 70, mi è stata data questa soluzione (codice sopra)

Non funziona così. Come risultato ottengo che cerco i massimi nella storia (trova i massimi nel giorno precedente), ma ho bisogno che aspetti l'adempimento dopo che questa funzione agisce (come il valore sulla 1a barra > 70) ... Se questa condizione è soddisfatta (non prima della barra > 70, ma dopo) il 1° maci è inferiore al 2°, allora l'ordine è chiuso

Qualche consiglio su cosa cambiare.

Grazie
 
xruss писал(а) >>

un'altra domanda - aiutaci)

come determinare dopo che un ordine è stato selezionato dalla cronologia il suo tipo (l'ordine è stato chiuso da Buy o Sell)?

// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()== MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            type  =OrderType(); <-----
          }
        }
      }
    }
  }
}
 
Roger >> :
Avete dichiarato una variabile e poi cercate di usarne un'altra.

Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!! Beh, avresti dovuto dirlo subito........... altrimenti la vecchiaia non è divertente - ma la gioventù è cattiva.....

>> >>SPASSYBOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

Potreste per favore consigliarmi
Ho bisogno di capire chiaramente se un ordine chiuso su stop o profitto
Ho fatto le variabili priceprofitbuy e pricestopbuy
prima di ordersend faccio pricebuy = Ask, poi l'ordine è sottoposto a pricebuy, se ha successo, allora allerta e ricorda priceprofitbuy e pricestopbuy, in base a pricebuy
ulteriori condizioni priceprofitbuy >= Bid= Bid e pricestopbuy <= Bid, controllo se l'ordine è chiuso in profitto o stop
; tuttavia, a volte Bid ha raggiunto il livello di takeprofit e l'ordine è chiuso, ma mentre il ciclo raggiunge priceprofitbuy >= Bid, Bid è diventato più basso, e il ciclo non funziona correttamente

Domanda - c'è un modo per rilevare chiaramente che l'ordine ha chiuso in profitto?
Ho provato ad assegnare una variabile al numero di ticket dell'ordine e poi controllare il profitto nella storia, ma l'ordine non può essere selezionato dal ticket - solo il profitto viene mostrato nella storia.

 
gramp >> :

Ho fatto le variabili priceprofitbuy e pricestopbuy
Metto pricebuy = Ask prima di ordersend, poi order-send per pricebuy; se ha successo, allerta e memorizza priceprofitbuy e pricestopbuy in base a pricebuy
poi usando la condizione priceprofitbuy >= Bid e pricestopbuy <= Bid, controllo se l'ordine è chiuso in profitto o stop
Tuttavia, succede che Bid ha raggiunto il livello di takeprofit, l'ordine viene chiuso, ma mentre il ciclo ha raggiunto priceprofitbuy >= Bid, Bid è diventato più basso e quindi il ciclo non funziona correttamente

Domanda - c'è un modo per rilevare chiaramente che l'ordine ha chiuso in profitto?
Ho provato ad assegnare un numero di biglietto alla variabile e poi controllare il profitto nella storia, ma l'ordine non può essere selezionato dal biglietto - solo il valore del profitto funziona nella storia.

Non è del tutto corretto:

Una posizione può aprirsi ad uno slippage (di solito ad un prezzo peggiore) invece che al prezzo esatto.

Sarebbe più corretto determinare il prezzo dell'ordine aperto utilizzando la funzione OrderOpenPrice(), avendolo precedentemente selezionato con OrderSelect(...).

Oppure, dopo la sua chiusura, calcola la differenza tra il prezzo di apertura e quello di chiusura. Quest'ultimo è determinato dalla funzione OrderClosePrice().

OrderType() restituirà il suo tipo (acquisto/vendita).

 

A xrust: Grazie mille.


Solo che non è chiaro come scrivere nelle condizioni commerciali che se il tipo di ordine chiuso era OP_BUY, allora blah blah(

Io ce l'ho così:


int ORDtype;
// ищем самый последний закрытый ордер
for( i=OrdersHistoryTotal(); i>=0; i--){
  if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){
    if(OrderSymbol()==Symbol()){
      if(OrderMagicNumber()== MagicNumber){
        if(OrderCloseTime()!=0){
          if(OrderCloseTime()> time){
            time  =OrderCloseTime();
            tikcet=OrderTicket();
            profit=OrderProfit();
            ORDtype  =OrderType(); <-----
          }
        }
      }
    }
  }
}
// торг условия
if(ORDtype=1)&&....

nella condizione ho scritto correttamente che se il tipo di ordine era OP_BUY allora blah blah blah?

 
xruss >> :

if(ORDtype=1)&&....

Ho scritto correttamente nella condizione che se il tipo di ordine era OP_BUY allora blablabla?

Dovrebbe essere:

se(ORDtype==1)&&....

 
Everlost >> :

Dovrebbe essere:

se(ORDtype==1)&&....

fa se non c'è storia - nel mio caso ORDtype ==0?

 
xruss >> :

Se non c'è storia - nel mio caso ORDtype ==0?

Sarà uguale al valore specificato quando si dichiara la variabile, cioè 0 nel vostro caso, perché nessun valore le è stato assegnato esplicitamente. A proposito, non avevo notato nel tuo post precedente che volevi selezionare l'ordine OP_BUY - questa costante è 0, mentre 1 è OP_SELL. Quindi è meglio dichiarare la variabile ORDtype con il valore -1:

int ORDtype=-1;

Per evitare confusione su quale valore corrisponde a quale tipo di operazione, potete anche specificarlo in condizione:


if (ORDtype==OP_BUY) ...

 
Everlost >> :

Sarà uguale al valore specificato quando la variabile è stata dichiarata, cioè nel vostro caso 0, poiché non c'è stata un'assegnazione esplicita di un valore ad essa. A proposito, non ho notato nel tuo post precedente che volevi selezionare l'ordine OP_BUY - questa costante è esattamente 0, mentre 1 è OP_SELL. Quindi è meglio dichiarare la variabile ORDtype con il valore -1:

int ORDtype=-1;

Per evitare confusione su quale valore corrisponde a quale tipo di operazione, potete anche specificarlo in condizione:


if (ORDtype==OP_BUY) ...

e se c'era un ordine Sell nella cronologia e poi l'Expert Advisor l'ha chiuso (nel tipo di cronologia esso (la sua chiusura) è visualizzato come t/p o s/l - non sarà considerato come l'ultimo? non è stato possibile ottenere l'effetto desiderato((

Motivazione: