Obtenez le volume initial d'une position ou l'exécution unique d'un ordre

 

Salut les gars,

quelqu'un peut-il m'aider s'il vous plaît : je cherche à obtenir le volume  initiale de ma dernière position ouverte (avant que mon TP ne ferme 50%), ou peut-être une idée afin qu'un ordre de clôture (TP) est exécuté une seule fois :

J'ai essayé ceci :

 double LastVolume( int direction)
   {
   double result = 0 ;
   for ( int i = PositionsTotal ()- 1 ; i >= 0 ; i--)
     {
       if ( PositionGetTicket (i) <= 0 ) continue ;
       if ( PositionGetInteger ( POSITION_TYPE ) > 1 ) continue ;
       if ((direction < 0 && PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY ) || (direction > 0 && PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_SELL )) continue ;
       if ( PositionGetString ( POSITION_SYMBOL ) == Symbol () && PositionGetInteger ( POSITION_MAGIC ) == MagicNumber)
        {
         result = PositionGetDouble ( POSITION_VOLUME );
         break ;
        }
      } 
     return (result);
   }

mais il renvoie le volume actuel, et non le volume de départ.

J'ai essayé de modifier :

result = OrderGetDouble ( ORDER_VOLUME_INITIAL );

mais il ne renvoie que 0.

L'objectif est que mon TP qui est un cross RSI, ferme 50% une seule fois et non sur chaque cross : pour cela j'ai :

 double OpenTradeSize()
  {
   double result = 0 ;
   int total = PositionsTotal ();
   for ( int i = 0 ; i < total; i++)
     {
       if ( PositionGetTicket (i) <= 0 ) continue ;
       if ( PositionGetInteger ( POSITION_MAGIC ) != MagicNumber || PositionGetString ( POSITION_SYMBOL ) != Symbol () || ( PositionGetInteger ( POSITION_TYPE ) != POSITION_TYPE_BUY && PositionGetInteger ( POSITION_TYPE ) != POSITION_TYPE_SELL )) continue ;
      result += PositionGetDouble ( POSITION_VOLUME );
     }
   return (result);
  }

et

 double VolumeBUY = LastVolume( 1 );

/////////////////////

if (RSI[ 0 ] >= RSI_TP1 && OpenTradeSize() == VolumeBUY)
      {   
      if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && MQLInfoInteger(MQL_TRADE_ALLOWED))
        myOrderClose(ORDER_TYPE_BUY, 50, "CLOSE TP1 50% LONG");
      else //not autotrading => only send alert
         myAlert("order", "CLOSE TP1 50% LONG error !");
      }

mais les TP ferment encore et encore 50% à chaque croisement.

mon ordre d'achat a 2 Tradesize :

 //Open Buy Order :
   if (signal == 1 )
     {
       MqlTick last_tick;
       SymbolInfoTick ( Symbol (), last_tick);
      price = last_tick.ask;
      SL = (Low[ 1 ]);
       if (MMactif == true ) TradeSize = MM_Size(price - SL);
       else TradeSize = MM_Size2(price - SL);
       if ( TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED ) && MQLInfoInteger ( MQL_TRADE_ALLOWED ))
        {
         ticket = myOrderSend( ORDER_TYPE_BUY , price, TradeSize, "Buy Trend" );
         if (ticket == 0 ) return ;
        }
       else //not autotrading => only send alert
         myAlert( "order" , "Buy Trend" );
     }

Je vous remercie beaucoup pour votre aide !

patrick

 

Merci de poster en français uniquement sur ce forum.

Vous pouvez utiliser l'outil de traduction automatique si nécessaire .

Merci.
 
Alain Verleyen #:

Merci de poster en français uniquement sur ce forum.

Vous pouvez utiliser l'outil de traduction automatique si nécessaire .

Merci.

Désolé j'ai cru toucher un plus large public en postant en anglais.

Du coup, je vois mon post en français maintenant, dois je le traduire et le reposter ?

 
Patrick Michael Appel #:

Désolé j'ai cru toucher un plus large public en postant en anglais.

Du coup, je vois mon post en français maintenant, dois je le traduire et le reposter ?

J'ai utilisé la traduction automatique(je n'ai pas vérifié la qualité de la traduction). Vous pouvez faire comme vous voulez, du moment que c'est en français.

Si vous voulez poster en anglais, alors vous devez utiliser le forum International en anglais.

MQL5 forum
MQL5 forum
  • www.mql5.com
MQL5: Forum on automated trading systems and strategy testing
 
Alain Verleyen #:

J'ai utilisé la traduction automatique(je n'ai pas vérifié la qualité de la traduction). Vous pouvez faire comme vous voulez, du moment que c'est en français.

Si vous voulez poster en anglais, alors vous devez utiliser le forum International en anglais.

ok merci ! C'est noté pour la prochaine fois !