Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 446

 

Chérie, j'ai besoin d'aide.

J'ai pris le code pour la comptabilité, les ordres d'ouverture et de fermeture dans le tutoriel (tradingexpert.mq4). Le code est prévu pour fonctionner avec une seule position. J'ai besoin d'avoir cinq positions.

Nous avons légèrement modifié le code de la façon suivante (les lignes modifiées sont en gras), de sorte que les positions sont ouvertes dans la bonne quantité, mais lorsque nous inversons, une seule position est fermée et la position inverse est ouverte immédiatement.

Comment puis-je faire en sorte que toutes les positions soient fermées lors du renversement, puis que seule la position opposée soit ouverte ?

   // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>5)                           // Было не более одного орд, стало не более пяти
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
   // Открытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Total < 5 && Opn_B==true)     // Открытых орд. нет +. Было Total < 1, стало Total < 5
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=Bid - New_Stop(StopLoss)*Point;     // Вычисление SL откр.
         TP=Bid + New_Stop(TakeProfit)*Point;   // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Открытие Buy
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
   // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Закрытие Buy
         if (Ans==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ",Ticket);
            break;                              // Выход из цикла закр
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
 
Forexman77:

Chérie, j'ai besoin d'aide.

J'ai pris le code pour la comptabilité, les ordres d'ouverture et de fermeture dans le tutoriel (tradingexpert.mq4). Le code est prévu pour fonctionner avec une seule position. J'ai besoin d'avoir cinq positions.

Nous avons légèrement modifié le code de la façon suivante (les lignes modifiées sont en gras), de sorte que les positions sont ouvertes dans la bonne quantité, mais lorsque nous inversons, une seule position est fermée et la position inverse est ouverte immédiatement.

Comment puis-je faire en sorte que toutes les positions soient fermées lors du renversement, puis que seule la position opposée soit ouverte ?


Faites de Ticket un tableau Ticket[5], stockez-y les 5 tickets. Lors de la fermeture, passez en revue tous les tickets en conséquence.
 
Vinin:

On ne peut pas être considéré comme un débutant par le niveau d'utilisation des bibliothèques. Après avoir regardé votre code, il me faudrait deux semaines pour le comprendre. Si ce n'est plus. Donc je pense que vous n'aurez pas de réponse.
Vitya, il n'y a pas besoin de comprendre quoi que ce soit - l'homme veut rendre les variables globales d'un "bac à sable" (EA avec ses bibliothèques) visibles dans l'autre "bac à sable" (bibliothèque compilée). :)))
 

Je ne suis pas un progammeur, je suis un constructeur de code. J'ai donc construit cet indicateur (je vois que vous pouvez faire une exposition de texte, pas un fichier t - c'est ce que je vais faire pour le rendre plus facile à comprendre.

#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, 2);
SetIndexBuffer(0,Buffer);
return(0);
}
// -------------------------------------------------------------------

int deinit()
{
return(0);
}
//--------------------------------------------------------------------

int start()
{
int StartBar = Bars - IndicatorCounted() - 1;
for(int i = StartBar; i >= 0; i--)
{
if(TimeDayOfWeek(Time[i]) < TimeDayOfWeek(Time[i+1]))
Buffer[i] = 0;
else
Buffer[i] = Buffer[i+1];
if(Close[i]>Close[i+1]&&Close[i+1]>=Close[i+2]){//если текущее и преддыдущее движение растут
Buffer[i] += NormalizeDouble((Close[i] - Close[i+1])/Point,0);}
if(Close[i]<Close[i+1]&&Close[i+1]<Close[i+2]){//если текущее и преддыдущее движение падают
Buffer[i] += NormalizeDouble((Close[i+1] - Close[i])/Point,0);}
if(Close[i]>Close[i+1]&&Close[i+1]<Close[i+2]){//если текущее лвижение растет а предыдущее падает
Buffer[i] += NormalizeDouble((Close[i+1] - Close[i])/Point,0);}
if(Close[i]<Close[i+1]&&Close[i+1]>=Close[i+2]){//если текущее движение падает а предыдущее растет
Buffer[i] += NormalizeDouble((Close[i] - Close[i+1])/Point,0);}
}
return(0);
}
//--------------------------------------------------------------------

Il montre la somme des points et la dynamique de leur sommation au cours de la semaine - aux plus petites échelles de temps, si le mouvement précédent se poursuit de Close[i+2] à Close[i+1] le mouvement actuel Close[i] est ajouté, sinon - est soustrait. Je devrais le prescrire de manière à ce que le programme voie la clôture du vendredi- au lieu de la clôture de la barre-. Je sais que cela peut être fait avec DayOfWeek et 5 (le numéro du vendredi), mais comment puis-je le faire de manière pratique ? Aide.

 
TarasBY:
Vitya, il n'y a rien à régler ici - la personne veut que les variables globales d'un sandbox (EA avec ses bibliothèques) soient visibles dans un autre sandbox (bibliothèque compilée). :)))

Igor, un peu faux ! Dans le "sandbox" (bibliothèque compilée), seules les fonctions et toutes les variables sont déclarées dans l'inluder. Et les variables qui sont déclarées dans l'inluder (fichier include) devraient être visibles dans la chouette, car j'ai inséré l'inluder directement dans la chouette. N'êtes-vous pas d'accord ?
 
Vitek2010:

Je ne suis pas un progammeur, je suis un constructeur de code. J'ai donc construit cet indicateur (je vois que vous pouvez faire une exposition de texte, pas un fichier t - c'est ce que je vais faire pour le rendre plus facile à comprendre.

Il montre la somme des points et la dynamique de leur sommation au cours de la semaine - aux plus petites échelles de temps, si le mouvement précédent se poursuit de Close[i+2] à Close[i+1] le mouvement actuel Close[i] est ajouté, sinon - est soustrait. Je devrais le prescrire de manière à ce que le programme voie la clôture du vendredi- au lieu de la clôture de la barre-. Je sais que cela peut être fait avec DayOfWeek et 5 (le numéro du vendredi), mais comment puis-je le faire de manière pratique ? Aide.


Cela conviendra-t-il ?

//+------------------------------------------------------------------+
//|                                                    Vitek2010.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link      "vinin@mail.ru"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
  {
   SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,2);
   SetIndexBuffer(0,Buffer);
   return(0);
  }
// -------------------------------------------------------------------

int deinit()
  {
   return(0);
  }
//--------------------------------------------------------------------

int start()
  {
   int StartBar=Bars-IndicatorCounted()-1;
   if (StartBar>1) StartBar--;
   
   for(int i=StartBar; i>=0; i--)
     {
      Buffer[i]=Buffer[i+1];
      int pos0=iBarShift(NULL, PERIOD_W1, Time[i]);
      int pos1=iBarShift(NULL, PERIOD_W1, Time[i+1]);
      if (pos0==pos1) 
         Buffer[i]+=MathAbs(Close[i]-Close[i+1]);
      else 
         Buffer[i]=MathAbs(Close[i]-Close[i+1]);
     }
   return(0);
  }
//--------------------------------------------------------------------
 
hoz:

Igor, un peu faux ! Seules les fonctions sont dans le bac à sable (bibliothèque compilée), et toutes les variables sont déclarées dans l'inluder. Et les variables qui sont déclarées dans l'inluder (fichier include) devraient être visibles dans la chouette, car j'ai inséré l'inluder directement dans la chouette. Vous n'êtes pas d'accord ?
alors qu'est-ce que la référence à la bibliothèque compilée a à voir avec cela ?
 
Vinin:


Est-ce que ça va ?

Non, je vais vous expliquer - votre forum est comme un espoir pour le dernier bastion compétent du prog. et de l'insertion de la taille - c'est ainsi que l'écriture PERIOD_W1 le voitmais ni l'utilisation de la taille ni l'utilisation de points de référence fixes comme les dates n'obtiennent l'effet désiré. J'ai posté une question spécifique sur le vendredi - d'ailleurs votre code ne compile pas parce qu'il dit 'version' - propriété inconnue, donc si vous ne savez pas comment mettre DayOfWeek et 5 (le numéro du vendredi) dans le code, les autres options ne vous aideront pas .
 
Vitek2010:
Non, il ne le fait pas. Je vais vous expliquer - votre forum est comme un espoir pour le dernier bastion compétent du prog. et de l'insertion de la taille - c'est ainsi qu'il voit l'écriture PERIOD_W1 mais ni l'utilisation de la taille ni l'utilisation de points de référence fixes comme dates n'obtiennent l'effet désiré. J'ai posté une question spécifique sur le vendredi - d'ailleurs votre code ne compile pas parce qu'il dit 'version' - propriété inconnue, donc si vous ne savez pas comment mettre DayOfWeek et 5 (le numéro du vendredi) dans le code, les autres options ne vous aideront pas .

TimeDayOfWeek(Time[i]) ne spécifie pas Time[i] mais une date spécifique au format D'2014.01.27'.

Et si vous avez besoin de déterminer quel jour nous sommes, il suffit d'appeler DayOfWeek().

 
evillive:

Dans TimeDayOfWeek(Time[i]), vous ne définissez pas Time[i] mais une date spécifique au format D'2014.01.27'.

Et si vous voulez déterminer quel jour nous sommes, il suffit d'appeler DayOfWeek().

Où avez-vous entendu parler de TimeDayOfWeek () (dans l'exemple) ? :)))