[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 118

 
mario065:

Bonjour,

Est-il possible d'entrer un programme avec un poids fixe 1:1 dans les paramètres ?

Si cela est possible, veuillez me dire comment.

Merci d'avance.

Cette bibliothèque peut.

Section "3.3 Fonction de paramétrage des propriétés des graphiques" fonction ServiceSetScaleFix1To1().

La bibliothèque ne fonctionne qu'avec les localisations russe et anglaise. Cela peut fonctionner dans le vôtre aussi.

 
Bonjour, pouvez-vous me dire pourquoi dans la nouvelle version 451 de MetaEditor, lorsque vous compilez, le deuxième fichier ex 4 n'apparaît pas dans le dossier des experts à côté du fichier mq 4 ?
 

Voici la fonction d'ouverture de l'ordre :

//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double price)
{
   int ticket = -1;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
   {
      if (i_sl > 0 && OrderStopLoss() == 0)
      {
         if (!OrderModify(ticket, OrderOpenPrice(), ND(SL), ND(TP), 0, Red))
         {
            Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError());
            Print("pt = ", pt);
            Print("Ask = ", Ask);
            Print("Bid = ", Bid);
            Print("SL_s = ", OrderOpenPrice() + i_sl * pt);
            Print("TP_s = ", OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return (true);
}

Voici l'impression des paramètres :

2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4499
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4519
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4513
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4515
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 11:02:56     2010.01.12 00:00  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #1 sell stop 0.10 EURUSD at 1.45091 ok

Ici, nous pouvons clairement voir que les prix TP et SL sont respectivement inférieurs et supérieurs aux prix Ask et Bid, c'est-à-dire que tout est correct. Mais pour une raison quelconque, je reçois une erreur de modification parce que l'arrêt est incorrect. Comment cela ?

 
hoz:

Voici la fonction d'ouverture de l'ordre :

Voici l'impression des paramètres :

Ici, vous pouvez clairement voir que les prix TP et SL sont respectivement inférieurs et supérieurs aux prix Ask et Bid, c'est-à-dire que tout est correct. Mais pour une raison quelconque, je reçois une erreur de modification parce que l'arrêt est incorrect. Comment cela ?

Lisez-vous ce qui est réprimandé ?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Valeur du paramètre de fonction non valide

Si vous ne comprenez rien, nous nous arrangerons avec le reste du monde...

ZZY. Lorsque vous passez un ordre en attente, la chaîne de caractères

if (price < Bid)

Lorsque vous passez un ordre en suspens, la chaîne ne devrait pas être tout à fait pertinente. Il faut vérifier la correspondance avec la distance minimale autorisée définie dans MarketInfo(Symbol(), MODE_STOPLEVEL). La première chose qui a immédiatement attiré mon attention.

La seconde consiste à imprimer le prix auquel l'ordre est fixé. Le Stop et le Take ne doivent pas être fixés par rapport au Ask et au Bid, mais par rapport au prix de fixation de l'ordre.

 
Zhunko:

Cette bibliothèque peut.

Section "3.3 Fonctions de réglage des propriétés graphiques" fonction ServiceSetScaleFix1To1().

La bibliothèque ne fonctionne qu'avec les localisations russe et anglaise. Cela peut fonctionner dans le vôtre aussi.

Merci Zhunko.
 
artmedia70:

Lisez-vous seulement ce qui est réprimandé ?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Valeur non valide du paramètre de fonction

Regardez les paramètres passés à la fonction appelée. Quand plus rien ne sera clair, nous nous débrouillerons en paix...


Bien sûr que je le lis, c'est pourquoi je suis curieux. J'ai dissocié tous les paramètres d'entrée.

C'est ce que j'ai obtenu :

bool OpenSell(double price)
{
   int ticket = -1;
   double SL = OrderOpenPrice() + i_sl * pt;
   double TP = OrderOpenPrice() - i_tp * pt;
   
   if (price < Bid)
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(price), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0 && OrderSelect(ticket, SELECT_BY_TICKET == true))
   {
      if (i_sl > 0 && OrderStopLoss() == 0)
      {
         Print("ND(price) = ", DoubleToStr(ND(price),Digits));
         Print("ND(SL) = ", DoubleToStr(ND(SL),Digits));
         Print("ND(TP) = ", DoubleToStr(ND(TP),Digits));
         Print("ND(OOP) = ", DoubleToStr(ND(OrderOpenPrice()),Digits));
         if (!OrderModify(ticket, ND(OrderOpenPrice()), ND(SL), ND(TP), 0, Red))
         {
            Print ("Ошибка установки первичного стопа для шортов ", OrderType(), " - ", GetLastError());
            Print("pt = ", pt);
            Print("Ask = ", Ask);
            Print("Bid = ", Bid);
            Print("SL_s = ", OrderOpenPrice() + i_sl * pt);
            Print("TP_s = ", OrderOpenPrice() - i_tp * pt);
         }
      }
   }
       return (true);
}

Voici ce qu'il y a dans le journal :

2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: TP_s = 1.4485
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: SL_s = 1.4505
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Bid = 1.4496
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ask = 1.4497
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: pt = 0.0001
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: Ошибка установки первичного стопа для шортов 5 - 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: OrderModify error 4051
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: invalid takeprofit for OrderModify function
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(OOP) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(TP) = -0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(SL) = 0.00100
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: ND(price) = 1.44946
2013.01.26 12:16:22	2010.01.12 01:45  Phillip_Nel's_TS_for_M5 EURUSD,M5: open #4 sell stop 0.10 EURUSD at 1.44946 ok

Certains des ordres sont modifiés et d'autres non. Les valeurs de ND(TP), ND(SL) au tout début ont été retournées au hasard. Pourquoi ?

La fonction de normalisation, d'ailleurs, est la mienne :

//+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
  return (NormalizeDouble(A, Digits));
}
 
artmedia70:

Lisez-vous seulement ce qui est réprimandé ?

ERR_INVALID_FUNCTION_PARAMVALUE 4051 Valeur non valide du paramètre de fonction

Voir les paramètres passés à la fonction à appeler. Quand rien n'est clair du tout, nous allons régler ça avec le monde...

ZS. Lorsque vous placez un ordre en attente, la ligne

if (price < Bid)

Ce n'est pas tout à fait approprié. Vous devez vérifier si la distance minimale autorisée correspond à celle spécifiée dans MarketInfo(Symbol(), MODE_STOPLEVEL). La première chose qui a attiré mon attention tout de suite.



Je rencontre généralement des contrôles similaires pour la modification des commandes, mais pas pour l'ouverture. Je l'ai déjà vu. Si le prix du bystop en attente est inférieur à celui de Ask, ce sera une erreur. Et si je fixe un stop de 10 pips, il sera sûrement plus élevé que la valeur du StopLoss. Je ne négocie pas sur les ticks :)
 
artmedia70:


Deuxièmement, imprimez le prix auquel l'ordre est fixé. Les ordres Stop et Take ne doivent pas être placés par rapport au Ask et au Bid, mais par rapport au prix auquel l'ordre est fixé.



Je suppose que c'est pour une modification ? Après tout, ce sont l'offre et la demande qui sont importantes pour nous lorsque nous ouvrons l'ordre. J'ai tout arrangé avec le post ci-dessus.
 

Bon après-midi,

Je veux faire fonctionner un EA sur plusieurs fenêtres en même temps. Mais un seul ordre peut être ouvert pour chaque instrument. Par conséquent, il y a maintenant une condition :

int total = OrdersTotal() ;

if (total<1) { analyse et blocage de la position ouverte} else { analyse et blocage de la position fermée }

Maintenant, si elle est ouverte sur deux symboles en même temps, l'ouverture sur l'un sera bloquée sur l'autre. C'est pourquoi j'ai inventé quelque chose de similaire :

int total = OrdersTotal() ;

int cnt ;

if(total>0)
{
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ;
if(OrderSymbol()==Symbol())
{
Symbol_FLAG = true ;
}
}
}

if(total<1 || total>0 && Symbol_FLAG == false) {analyse et ouverture du bloc ptposition}

mais ça ne fonctionne pas sur le testeur...

Peut-être que vous pouvez me dire, peut-être que je suis sur quelque chose d'irréalisable ?

 

Je suis tiré d'affaire :) j'ai trouvé le bug, et je m'occuperai du travail multi-instruments dans la démo de lundi ;)