[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 50

 
Zhunko:
Le mark allemand, l'écu et l'euro ont été pris en compte. Je pensais que tout le monde le savait.

Il s'avère que pas tout le monde... :(

C'est étrange... Une marque est une marque - ce n'est pas un euro... Eh bien, oubliez ça... Nous prendrons ce fait en compte...

 
Notter:

Bonjour à toutes les bonnes volontés,

Question sur le trading avec des mouvements forts. La fonction OrderSend possède le paramètre slippage - dé rapage maximal par rapport au prix de l'ordre. Y a-t-il des limites à sa valeur ? Ou peut-on le fixer à 1000 points ? La valeur "0" signifie-t-elle que le slippage est nul ou que ce paramètre n'est pas pris en compte lors de l'ouverture de l'ordre ?

Par ailleurs, en cas de fort mouvement, mon ordre de bourse envoyé depuis mon terminal client atteindra-t-il le serveur et attendra-t-il l'exécution des ordres en attente qui sont placés sur le serveur indépendamment de leur prix ou sera-t-il exécuté immédiatement au prix du marché au moment de sa réception ? En d'autres termes, puis-je espérer que l'ordre soit exécuté avant la rupture ou qu'il ne soit ouvert qu'au début de la correction ?

Le slippage est la différence en points entre le prix de l'ordre dans votre terminal et le prix renvoyé par le serveur. Pendant qu'ils y pensent, le prix peut aussi s'éloigner. Lorsqu'il y a un fort mouvement, le serveur ralentit généralement. Plus il couve, moins vous avez de chance d'ouvrir au prix affiché, et donc à un meilleur prix pour vous. Si vous définissez un slippage de 1000 pips, vous ouvrirez... à la fin du déménagement. Cela est rentable pour les sociétés de courtage. Et plus il y a de "cuisine :)", plus le serveur va "réfléchir", vous surchargeant de requotes et ainsi de suite.

En fixant le paramètre de slippage à 0, vous n'ouvrirez que si le prix de l'ordre et le prix renvoyé par le serveur sont identiques.

 

Bonne année !

J'ai écrit un code qui est censé trouver le maximum et le minimum de la période de temps spécifiée dans la journée. Mais en fait, quelque chose ne fonctionne pas. Veuillez y jeter un coup d'œil.

//+------------------------------------------------------------------+
//|                                                     +Session.mq4 |
//|                                       Copyright 2012, silhouette |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, silhouette"
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#include <+ChartTrendLineCreate.mqh>

string OpenTime="00:00"; // время открытия сессии
string CloseTime="09:00"; // время закрытия сессии
int Days=100; // количество расчитываемых дней

//+------------------------------------------------------------------+
string Symb;
int i;
bool Ans;
//+------------------------------------------------------------------+
int init()
  {
   Symb=Symbol();
   return(0);
  }

int deinit()
  {

   return(0);
  }

int start()
  {
   //+------------------------------------------------------------------+
   datetime Time_OD, H1_OS, H1_CS; 
   int H1_OpenDayShift, H1_OpenSessionShift, H1_CloseSessionShift, Hst, Lst;
   string H1_OD;
   double Maximum, Minimum;
   //+------------------------------------------------------------------+
   for(i=0; i<100; i++) // перебираем дни
    {
     Time_OD=iTime(Symb,PERIOD_D1,i); // находим дату открытия выбранного бара
     H1_OpenDayShift=iBarShift(Symb,PERIOD_H1,Time_OD,false); // ...его индекс
     
     H1_OD=TimeToStr(Time_OD,TIME_DATE); 
     
     H1_OS=StrToTime(H1_OD+" "+OpenTime);
     H1_OpenSessionShift=iBarShift(Symb,PERIOD_H1,H1_OS,false); // ...индекс бара открытия сессии
     H1_CS=StrToTime(H1_OD+" "+CloseTime);
     H1_CloseSessionShift=iBarShift(Symb,PERIOD_H1,H1_CS,false); // ...индекс бара закрытия сессии
     
     // ... максимум и минимум
     Hst=iHighest(Symb,PERIOD_H1,MODE_HIGH,(H1_OpenSessionShift-H1_CloseSessionShift),H1_CloseSessionShift);
     Lst=iLowest(Symb,PERIOD_H1,MODE_LOW,(H1_OpenSessionShift-H1_CloseSessionShift),H1_CloseSessionShift);
     Maximum=iHigh(Symb,PERIOD_H1,Hst);
     Minimum=iLow(Symb,PERIOD_H1,Lst);
     
     ChartTrendLineCreate(H1_OS, Maximum, H1_CS, Maximum, Red);
     ChartTrendLineCreate(H1_OS, Minimum, H1_CS, Minimum, Red);
     
     
    }

   return(0);
  }

 
silhouette:

Bonne année !

J'ai écrit un code qui est censé trouver le maximum et le minimum de la période de temps spécifiée dans la journée. Mais en fait, quelque chose ne fonctionne pas. Veuillez y jeter un coup d'œil.

Essayez H1_OpenSessionShift-H1_CloseSessionShift +1
 
Mislaid:
Essayez H1_OpenSessionShift-H1_CloseSessionShift +1
Merci, maintenant il trouve tout comme il le devrait.
 
Pouvez-vous me dire comment créer un EA qui place des ordres toutes les 4 heures sur TF D1 ? Maintenant, je dois passer manuellement au petit TF et placer un ordre si les signaux de l'indicateur coïncident avec D1. C'est fatigant et peu pratique.
 
sultonov:
Si je voulais demander comment je pourrais configurer un EA sur TF D1 pour placer des ordres toutes les 4 heures, par exemple ? Si le signal de mon indicateur est le même que sur D1, je dois alors aller manuellement sur le petit TF et placer l'ordre. C'est fatiguant et peu pratique.

Bonne année, Yusuf ! !!

Pour cela, vous devez prescrire explicitement des conditions dans votre EA, y compris le suivi du temps pour définir les ordres, vous pouvez contrôler une nouvelle barre sur TF H4 pour lui permettre de fonctionner.

Dans votre cas, qu'est-ce qui empêche l'EA d'être attaché au graphique des symboles sur H4 et d'obtenir des signaux pour ouvrir des ordres en utilisant D1 et en les paramétrant explicitement dans le code de l'expa ?

P.S. Et vous ? Vous ne buvez pas d'alcool ou autre chose ?

C'est le 2 janvier ici - buvez et buvez ! :-)

 

J'ai écrit une fonction qui devrait trouver le TP par Fibo :

//+-------------------------------------------------------------------------------------+
//| Вычисление ТП по Фибе                                                               |
//+-------------------------------------------------------------------------------------+
double GetProfitByFibo()
{
  double minValue, maxValue;
  
 // if(GetStateMa() == MA_TALKING_LONG)
    if(OrderType() == OP_BUYSTOP)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftB);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftB);
     
      if((maxValue - minValue) >= 7*pt)
      {
      double fibo1618 = NormalizeDouble((minValue + (maxValue - minValue)*1.618),Digits);
      }
   
    }
  
 // if(GetStateMa() == MA_TALKING_SHORT)
    if(OrderType() == OP_SELLSTOP)
    {
      maxValue = iHigh(Symbol(),i_ExtremumLookingTF,i_maxValueShiftS);
      minValue = iLow(Symbol(),i_ExtremumLookingTF,i_minValueShiftS);
 
      if((maxValue - minValue) >= 7*pt)
      {
      fibo1618 = NormalizeDouble((maxValue - (maxValue - minValue)*1.618),Digits);
      }
          
  }
  return(fibo1618);
}

Les variables externes pour cette fonction sont ici :

extern string ___H2 = "_____  Параметры для функции Fibo_TP _____";
extern int i_ExtremumLookingTF = 5,
           i_maxValueShiftB = 8,
           i_minValueShiftB = 3,
           i_maxValueShiftS = 3,
           i_minValueShiftS = 8;

J'insère cette fonction à la place d'un Take Profit fixe dans un EA qui fonctionne et l'EA commence à se bloquer. Qu'est-ce qui peut bien se passer ?

Parfois, lors de la modification d'un ordre, le TP n'est pas du tout défini.

Il s'agit d'une fonction d'achat, par exemple (j'ai commenté la fonction de modification précédente) :

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
  int ticket = -1;
  string myNote = "Сов баянул";
  
  double price = High[1] + i_thresholdFromInput*pt;
  double SL = Low[1] - i_thresholdFromBasedSL*pt ;

  if(price > Ask)
  {
    ticket = OrderSend(Symbol(),OP_BUYSTOP,0.1,NormalizeDouble(price,Digits),i_slippage,0,0,myNote,i_myMagic,0,Navy);
  }
  
  if(ticket > 0 && OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
  //  if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),NormalizeDouble(High[1] + i_tp*pt,Digits),0,Navy))
//  Print("GetProfitByFibo() = ", GetProfitByFibo());
      if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),GetProfitByFibo(),0,Navy))
    return(false);
  
  return(true);
}
 
double GetOrderOpenPrice(string sy="NULL", int op=-1, int mn=-1)
{
datetime t ;
double r=0 ;
int i, k=OrdersTotal() ;

if (sy=="0") sy=Symbol() ;
for (i=0 ; i<k ; i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==sy || sy=="")
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if (op<0 || OrderType()==op)
{
if (mn<0 || OrderMagicNumber()==mn)
{
si (t<OrderOpenTime())
{
t=OrderOpenTime() ;
r=OrderOpenPrice() ;
}
}
}
}
}
}
}
return(r) ;

}


Cette fonction vérifie le prix d'ouverture du dernier ordre.

Comment écrire cette condition dans l'appel de fonction : Si le prix a augmenté ou diminué de 75 pips par rapport au prix d'ouverture du dernier ordre, nous continuerons à travailler.

 

Bonjour !

Le fichier joint contient une EA de Voldemar. Malheureusement, il ne répond pas en privé et j'aimerais y remédier le plus rapidement possible.

Comment puis-je modifier les conditions d'ouverture de la commande ? Pour le moment, l'EA est réglé sur le prix du rollback. Nous voulons qu'il s'ouvre sur la base de la dernière barre. Si le prix de clôture est inférieur au prix d'ouverture, une vente sera ouverte et vice versa.

Merci.

Dossiers :
Raison: