[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 317

 
enya:

.

dans l'insertion. problèmes avec le cycle et rétablissement des valeurs initiales après la sortie du cycle

Voici la fonction qui répondra si la dernière transaction a été profitable ou non :

 double LastOrderProfit()
 {
   double Profit=0;
   int ticket; 
   for(int i=0; i<OrdersHistoryTotal(); i++){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(ticket<OrderTicket()){
        ticket=OrderTicket();
        Profit=OrderProfit()+OrderSwap()+OrderCommission();
     } 
   }     
 return(Profit);
 } 

Ensuite, en comparant sa réponse à zéro, vous décidez de laisser TP/SL inchangés ou de les modifier.

 if(LastOrderProfit()>0) newTPSL=false; else  newTPSL=true;
if(newTPSL)OrderModify(.......newSL,newTP...);
 

Bonjour à tous. Je suis intéressé par l'indicateur IN10TION NewsReader. Je veux l'attacher à mon EA.

Si une ligne rouge apparaît (Market.TdOpen) et Market.Price.DOWN(red) alors vendez.

Si une ligne rouge apparaît (Market.TdOpen) et Market.Price.UP(vert), alors achetez.

Quelles actions puis-je entreprendre ? J'ai essayé iCustom mais cela ne fonctionne pas !


extern bool Market.TdOpen = TRUE;
extern color Market.TdOpen.Color = Red;
extern bool Market.TdFibo = TRUE;
extern color Market.TdFibo.Color = C'0x00,0x32,0x00';
extern color Market.Price.UP = Lime;
extern color Market.Price.DOWN = Red;
extern bool Market.Price.Guide = TRUE;

Fichiers joints:
_yIN10TIONfNewsReaderov09.99kblite.ex4 (115.59 KB) supprimer

 

Je m'excuse auprès des administrateurs de me répéter, mais personne ne m'a encore adressé la moindre remarque. L'idée est de sortir les messages stockés dans les journaux, c'est-à-dire ceux qui ne peuvent pas être corrigés correctement par la fonction IsConnected() - échecs de connexion, requêtes. Sinon, on ne sait pas pourquoi l'EA ne fait rien pour l'instant.


Veuillez suggérer le code ci-dessous pour lire le fichier journal. Lit automatiquement le fichier journal actuel par date et le sort sur l'imprimante.

Où :

while (result>0) {

Un dossier est en cours d'assemblage à partir de pièces. Mais je n'ai pas besoin de tout le fichier, juste de la dernière ligne. Aidez-nous à le corriger, s'il vous plaît.

void ReadWrite() {
   string tekTime=TimeStr1(CurTime(),1);
   string path=TerminalPath()+"\\logs\\"+tekTime+".log";
   string title="Чтение из файла";
   string msg;
   int result;
   int handle=_lopen(path,4);
   if (handle<0) {
      msg="Ошибка открытия файла";
      Print(msg);
      return;
   }
   result=_llseek (handle,0,0);
   string buffer="";
   //string char="x                      ";
   string char="x                                                                                                                                                                                                                                                         ";
   int count=0;
   result=_lread (handle,char,250);
   while (result>0) {
      buffer=buffer+char;
      char="x                                                                                                                                                                                                                                                         ";
      count++;
      result=_lread (handle,char,250);
   }
   result=_lclose (handle);
   msg=StringTrimRight(buffer);
   Print(msg);
}

//------------------расчет времени----------------
string TimeStr1(int taim,int tip)
{
   string sTaim;
   string sTaim1,sTaim2,sTaim3;
   if (tip==1) 
   {
      int GD=TimeYear(taim);                  
      int MN=TimeMonth(taim);                  
      int DD=TimeDay(taim);  
      
      sTaim1 = DoubleToStr(GD,0);
      if (MN<10) sTaim2 = StringConcatenate(sTaim2,"0"+DoubleToStr(MN,0));
      else sTaim2 = StringConcatenate(sTaim2,DoubleToStr(MN,0));
      if (DD<10) sTaim3 = StringConcatenate("0",DoubleToStr(DD,0));
      else sTaim3 = DoubleToStr(DD,0);
      sTaim=sTaim1+sTaim2+sTaim3;
   }
   return(sTaim);
}
 

Besoin d'aide pour changer un EA

Le conseiller expert devrait négocier à l'inverse.

Au lieu d'ordres de vente limités, les ordres d'achat

et les ordres d'achat limités vendent

Dossiers :
tke.mq4  18 kb
 
mersi:

Voici la fonction qui répondra si la dernière transaction a été profitable ou non :

Ensuite, en comparant sa réponse à zéro, vous décidez de laisser TP/SL inchangés ou de les modifier.

Votre fonction est-elle sûre de renvoyer la dernière commande ? Ou retournera-t-il la première commande qui n'a pas été perdue ? Pourquoi y a-t-il un chèque sur le billet ?

Je le ferais de cette façon :

//+----------------------------------------------------------------------------+
double LastOrderProfit() {
   double Profit=0;
   datetime t;
   int i, j;
   for (i=0; i<OrdersHistoryTotal(); i++) {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if (OrderMagicNumber()!=Magic)                  continue;
      if (OrderSymbol()!=Symbol())                    continue;
      if (OrderType()>1)                              continue;
      if (t<OrderCloseTime()) {
         t=OrderCloseTime();
         j=i;
         }
      }
   if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
   return(Profit);
} 
//+----------------------------------------------------------------------------+

Il s'agit d'une refonte de votre fonction pour trouver exactement le dernier ordre fermé.

Elle présente l'inconvénient de renvoyer zéro s'il n'y a pas d'ordres fermés. Ainsi, en l'utilisant, il est impossible de savoir avec certitude s'il y a ou non des ordres fermés dans l'historique. Après tout, le zéro retourné n'indique pas qu'il n'y a pas d'ordre du tout, mais qu'il est fermé à zéro.

 

Veuillez me conseiller :

est intéressé par le rendu de la valeur de l'indicateur seulement pour dernier (actuel) bar. Cependant, lors de l'ouverture d'une nouvelle barre, les anciennes valeurs restent sur le graphique..... Comment puis-je faire disparaître ces déchets par la force ? Est-il possible de spécifier la condition suivante : pour la barre [0], les valeurs de l'indicateur sont calculées et affichées, et pour les barres de [1] à [Bar-1], ces valeurs sont remises à zéro ?

double Buffer [1];            

int init()
  {

   IndicatorBuffers(1);
  
   SetIndexStyle(0,DRAW_ARROW);
   .........
 
   return(0);
  }

int deinit()
  {
   return(0);
  }

int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) counted_bars=0;
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
       for(int i=limit;i>=0;i--) 
     {
         Buffer [0] = ............;
     }
   return(0);
  }        
 

artmedia70:

Elle présente l'inconvénient de renvoyer zéro si aucun ordre n'a été clôturé. Ainsi, en l'utilisant, il est impossible de savoir avec certitude s'il y a ou non des ordres fermés dans l'historique. Après tout, la nullité retournée ne signifie pas qu'il n'y a pas d'ordre du tout, mais elle montre qu'il a été fermé à zéro.

Merci ! Bien que vous ne m'ayez pas répondu, vous avez répondu à ma question précédente concernant le calcul correct du bénéfice :

Profit=OrderProfit()+OrderSwap()+OrderCommission();
 
Azerus:

Veuillez me conseiller :

est intéressé par le rendu de la valeur de l'indicateur seulement pour dernier (actuel) bar. Cependant, lors de l'ouverture d'une nouvelle barre, les anciennes valeurs restent sur le graphique..... Comment puis-je faire disparaître ces déchets par la force ? Est-il possible de spécifier la condition suivante : pour la barre [0], les valeurs de l'indicateur sont calculées et affichées, et pour les barres de [1] à [Bar-1], ces valeurs sont remises à zéro ?

Au début de Start(), initialiser le tampon avec la valeur EMPTY_VALUE. C'est-à-dire, faites-le à l'apparition d'une nouvelle barre, vérifiez le temps d'ouverture de la barre zéro et faites votre logique de nettoyage des ordures.

 
artmedia70:

Votre fonction est-elle sûre de renvoyer la dernière commande ? Ou le premier rencontré qui n'est pas non rentable ? Pourquoi y a-t-il un chèque sur le billet ?

Je le ferais de cette façon :

Il s'agit d'une conversion de votre fonction pour trouver exactement le dernier ordre fermé.

Elle présente un inconvénient : si aucun ordre n'a été clôturé, elle renvoie zéro. Ainsi, lorsqu'on l'utilise, on ne peut pas savoir avec certitude s'il y a des ordres fermés ou non dans l'historique. Le zéro retourné n'indique pas du tout l'absence de l'ordre, mais il indique qu'il a été clôturé à zéro.

1. La fonction trouve l'ordre avec le plus grand ticker dans l'historique, ce qui signifie le dernier ordre clôturé (sauf, bien sûr, si nous prenons un cas exceptionnel, pour lequel votre variante avec le temps maximum de clôture est préférable).

2. Selon les conditions , le premier ordre est ouvert avec le TP/SL spécifié et seul le second ordre peut être ouvert avec le nouveau TP/SL, ce qui signifie que la fonction ne peut retourner zéro que si la première transaction était nulle, mais pas s'il n'y a pas d'ordres fermés dans l'historique.

Une dernière chose. Dans votre variante, l'utilisation de j et d'un autre SELECT dans la fonction est redondante.

c'est suffisant :

 if (t<OrderCloseTime()) {
         t=OrderCloseTime();
      Profit=OrderProfit()+OrderSwap()+OrderCommission();
  }
   return(Profit);
 
snail09:
Au début de Start(), initialiser le tampon avec la valeur EMPTY_VALUE.


Comment ça se fait ? J'ai ceci dans les paramètres de la ligne de l'indicateur après int init()

   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,165);                     
   SetIndexBuffer(0,Buffer);
   SetIndexEmptyValue(0,0.0);
Raison: