[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 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;  
}
Bon après-midi . Veuillez me conseiller. A ma question sur la comparaison des tops avec le RSI lorsque sa valeur est supérieure à 70, on m'a demandé cette solution (code ci-dessus)

Cela ne fonctionne pas comme ça. Le résultat est que je cherche les maxima dans l'historique (il trouve les maxima du jour précédent), mais j'ai besoin qu'il attende l'accomplissement après que cette fonction ait agi (comme la valeur sur la 1ère barre > 70) .... Si cette condition est remplie (pas avant la barre > 70, mais après), le 1er maci est inférieur au 2ème, alors l'ordre est fermé.

Des conseils sur ce qu'il faut changer.

Merci.
 
xruss писал(а) >>

une autre question - aidez-nous)

comment déterminer, après qu'un ordre ait été sélectionné dans l'historique, son type (l'ordre a-t-il été fermé par Achat ou Vente) ?

// ищем самый последний закрытый ордер
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 >> :
Vous avez déclaré une variable et vous essayez ensuite d'en utiliser une autre.

Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa !!!!!!!!!!!!!!!!!!! Eh bien, vous auriez dû le dire tout de suite........... sinon la vieillesse n'est pas drôle - mais la jeunesse est méchante.....

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

 

Pourriez-vous me conseiller
J'ai besoin de comprendre clairement si un ordre a été clôturé sur le stop ou le profit
J'ai créé les variables priceprofitbuy et pricestopbuy
avant la fin des ordres je fais pricebuy = Ask, puis l'ordre est soumis à pricebuy, s'il réussit, alors l'alerte et le souvenir de priceprofitbuy et pricestopbuy, basé sur pricebuy
autres conditions priceprofitbuy >= Bid= Bid et pricestopbuy <= Bid, je vérifie si l'ordre est fermé sur le profit ou le stop
; cependant, parfois Bid a atteint le niveau takeprofit et l'ordre est fermé, mais alors que la boucle atteint priceprofitbuy >= Bid, Bid est devenu inférieur, et la boucle ne fonctionne pas correctement

Question - existe-t-il un moyen de détecter clairement que l'ordre a été clôturé sur le bénéfice ?
J'ai essayé d'affecter une variable au numéro de ticket de l'ordre, puis de vérifier le bénéfice dans l'historique, mais l'ordre ne peut pas être sélectionné à partir du ticket - seul le bénéfice est affiché dans l'historique.

 
gramp >> :

J'ai créé les variables priceprofitbuy et pricestopbuy.
Je place pricebuy = Ask avant ordersend, puis order-send par pricebuy ; en cas de succès, alerte et stockage de priceprofitbuy et pricestopbuy en fonction de pricebuy
Ensuite, en utilisant la condition priceprofitbuy >= Bid et pricestopbuy <= Bid, je vérifie si l'ordre est fermé sur le profit ou le stop.
cependant, il arrive que l'offre ait atteint le niveau takeprofit, l'ordre est fermé, mais alors que le cycle a atteint priceprofitbuy >= Bid, l'offre est devenue plus basse et le cycle ne fonctionne pas correctement.

Question - existe-t-il un moyen de détecter clairement que l'ordre a été clôturé sur le bénéfice ?
J'ai essayé d'affecter une variable au numéro du ticket de commande et de vérifier ensuite le bénéfice dans l'historique, mais la commande ne peut pas être sélectionnée à partir du ticket - seule la valeur du bénéfice fonctionne dans l'historique.

Ce n'est pas tout à fait correct :

Une position peut s'ouvrir à un slippage (généralement à un prix inférieur) au lieu du prix exact.

Il serait plus correct de déterminer le prix de l'ordre ouvert à l'aide de la fonction OrderOpenPrice(), en l'ayant préalablement sélectionné à l'aide de OrderSelect(...).

Ou, après sa fermeture, calculez la différence entre le prix d'ouverture et de fermeture. Ce dernier est déterminé par la fonction OrderClosePrice().

OrderType() retournera votre type (achat/vente).

 

A xrust : Merci beaucoup.


Seulement il n'est pas clair comment écrire dans les conditions de transaction que si le type d'ordre fermé était OP_BUY, alors blah blah(

Je l'ai comme ça :


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)&&....

dans la condition, j'ai correctement écrit que si le type d'ordre était OP_BUY alors bla bla bla ?

 
xruss >> :

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

J'ai écrit correctement dans la condition que si le type de commande était OP_BUY alors blablabla ?

Il devrait l'être :

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

 
Everlost >> :

Il devrait l'être :

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

fa s'il n'y a pas d'historique - dans mon cas ORDtype ==0 ?

 
xruss >> :

S'il n'y a pas d'historique - dans mon cas ORDtype ==0 ?

Elle sera égale à la valeur spécifiée lors de la déclaration de la variable, c'est-à-dire 0 dans votre cas, car aucune valeur ne lui a été explicitement attribuée. A propos, je n'avais pas remarqué dans votre message précédent que vous vouliez sélectionner l'ordre OP_BUY - cette constante est 0, alors que 1 est OP_SELL. Il est donc préférable de déclarer la variable ORDtype avec la valeur -1 :

int ORDtype=-1;

Pour éviter toute confusion sur la valeur correspondant à tel ou tel type d'opération, vous pouvez également la spécifier en condition :


if (ORDtype==OP_BUY) ...

 
Everlost >> :

Elle sera égale à la valeur spécifiée lorsque la variable a été déclarée, c'est-à-dire dans votre cas 0, puisqu'il n'y a pas eu d'affectation explicite d'une valeur à cette variable. A propos, je n'ai pas remarqué dans votre message précédent que vous vouliez sélectionner l'ordre OP_BUY - cette constante est exactement 0, alors que 1 est OP_SELL. Il est donc préférable de déclarer la variable ORDtype avec la valeur -1 :

int ORDtype=-1;

Pour éviter toute confusion sur la valeur correspondant à tel ou tel type d'opération, vous pouvez également la spécifier en condition :


if (ORDtype==OP_BUY) ...

et s'il y avait un ordre de vente dans l'historique et qu'ensuite le Conseiller Expert l'a fermé (dans le type d'historique, il (sa fermeture) est affiché comme t/p ou s/l - ne sera-t-il pas considéré comme le dernier ? n'a pas pu atteindre l'effet désiré((