Questions des débutants MQL5 MT5 MetaTrader 5 - page 410

 
rosomah:

Pouvez-vous me dire si en utilisant la bibliothèque standard, lors de l'obtention des Ask et Bid, il est nécessaire de faire mysymbol.RefreshRates() ;

c.-à-d. mise à jour ou pour les données de la bibliothèque, n'avez-vous pas besoin de mettre à jour ?

ou

si vous avez besoin des prix actuels, vous n'avez rien à faire

si((Bid-Xprice)/Point>=Step)

 

Je ne comprends pas quelque chose) Je travaille sur ce code depuis 3 heures. Il s'agit d'une fonction pour une grille. Elle est appelée à l'ouverture d'un nouvel ordre dans la grille, son but est de recalculer le TP et de le modifier pour tous les ordres de la grille.

Mais cela ne change que le TP de l'ordre le plus ancien dans la grille.

Qu'est-ce que je mélange ?))

void ModifyOrders()
  {
   double avg= 0;
   int count = 0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OP_SELL)
              {
               avg+=OrderOpenPrice();
               count++;
              }
           }
        }
     }
   int Tcount=count-1;        // Print("204");
   avg=(Tcount*Step*0.4);
//     avg=NormalizeDouble(avg/count,Digits);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               double Bprice=FindLastBuyPrice();//Print("215");
               TP=NormalizeDouble(Bprice+avg*Point,Digits); //Print("216");
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Blue);// Print("217");
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }

            if(OrderType()==OP_SELL)
              {
               double Sprice=FindLastSellPrice();
               TP=NormalizeDouble(Sprice-avg*Point,Digits);
               bool res=OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0,Red);
               if(!res)
                  Print(" Error modification. Error code = ",DoubleToString(GetLastError(),0));
              }
           }
        }
     }

  }
 
Leanid Aladzyeu:

Je ne comprends pas quelque chose) Je travaille sur ce code depuis 3 heures. Il s'agit d'une fonction pour une grille. Elle est appelée à l'ouverture d'un nouvel ordre dans la grille, son but est de recalculer le TP et de le modifier pour tous les ordres de la grille.

Mais cela ne change que le TP de l'ordre le plus ancien dans la grille.

Qu'est-ce que je mélange ?))

Quand allez-vous changer de navigateur ? Comme un enfant.
 
Karputov Vladimir:
Quand allez-vous changer de navigateur ? Comme un enfant.

C'est un problème avec le site qu'ils n'ont pas adapté à mon navigateur. Service Desk comme d'habitude, aucune aide. Je suis bien avec mon navigateur.

 
Leanid Aladzyeu:

C'est un problème avec le site qu'ils n'ont pas adapté à mon navigateur. Service Desk comme d'habitude, aucune aide. Je suis bien avec mon navigateur.

Vous pouvez toujours utiliser Internet Explorer pour coller du code - il collera le code exactement. Pensez aux personnes qui vous entourent - il est gênant de lire le code au moment où vous le collez.
 

Pouvez-vous m'indiquer le code pour MT4. Si une nouvelle barre est arrivée, redessinez l'indicateur graphique.

Je pense avoir trouvé le code et l'avoir mis en route.

if(IsNewBar())
   {
    Print("Новый бар");
    RefreshRates();
    WindowRedraw();

   }

// функция за кодом

 bool IsNewBar()

{

   static datetime BARflag = 0;

   datetime now = Time[0];

   if(BARflag < now)

   {

      BARflag = now;         

      return(1);

   }

   

   else

   {

      return(0);

   }

}


L'impression disparaît mais le graphique ne se redessine pas =(

 
twiling1983:

Pouvez-vous m'indiquer le code pour MT4. Si une nouvelle barre est arrivée, redessinez l'indicateur graphique.

Je pense avoir trouvé le code et l'avoir mis en route.


L'impression disparaît mais le graphique ne se redessine pas =(

Probablement parce que les RefreshRates et WindowRedraw n'ont aucun effet sur les indicateurs. Vous devez creuser les indicateurs.
 

Comment déterminer ce que l'on achète sur le graphique actuel et pour quoi (crooked Russian, sorry). Par exemple, sur le graphique EURUSD, la devise de base (ce que nous achetons) est l'EUR et la devise cotée (ce pour quoi nous achetons) est l'USD. Ils peuvent être identifiés :

string first = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_BASE);
string second = SymbolInfoString(Symbol(), SYMBOL_CURRENCY_PROFIT);

Qu'en est-il de l'or, par exemple ? Sur un graphique GOLD, les deux valeurs seront USD. Et je dois déterminer que nous achetons de l'or en USD. L'analyse de la chaîne de noms de symboles n'est pas appropriée.

 
Alexey Viktorov:
Probablement, car les RefreshRates et WindowRedraw n'ont aucun effet sur les indicateurs. Vous devez creuser dans les indicateurs.

Eh bien, si vous appuyez sur le bouton d'actualisation dans le terminal, tout est recalculé.

comment appuyer sur le même bouton dans le code ? =)

C'est comme ça que je le vois.

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT) ;

 

J'ai commencé à étudier les tableaux.

J'ai écrit une fonction pro-order avec des tableaux, 3 tableaux = 0 achat, 1= vente, 2= total des transactions d' achat et de vente.

Puis j'ai écrit une condition d'achat si ( la première condition && array [0] == 0 )alors nous ouvrons un achat.

et en vente si ( la première condition && array [1]== 0) alors nous ouvrons une position de vente.

Mais le testeur lance une erreur et le test s'arrête, quel est le problème ? ( error " array exit " )

Raison: