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

 
Roman.: J'ai téléchargé la configuration du terminal depuis le site de la société de courtage, je veux tester les hiboux avec les cotations de cette société de courtage particulière dans le testeur de stratégie, mais lorsque j'appuie sur F2 et télécharge les cotations, le testeur affiche cette fenêtre... Est-il possible de télécharger les devis de la société de courtage sélectionnée ?
Roman, je ne peux vous donner qu'un seul conseil : allez sur le site web de votre société de courtage et consultez son historique.
 

Bon après-midi. Je veux connecter mon .dll à un script. J'ai essayé de tester cet exemple :

#import "user32.dll"
    int    MessageBoxA(int hWnd, string lpText, string lpCaption, int uType);
#import

int start()
{
    MessageBoxA(0, "Some", "Some", 0);
   
    return;
}

Ça marche, une fenêtre s'ouvre. J'ai écrit ma dll :

#ifndef DLLTEST_H
#define DLLTEST_H

#pragma once

extern "C" __declspec(dllexport) int __stdcall Test()
{
    return 2;
}

#endif // DLLTEST_H

Je l'ai testé en le connectant à un programme ordinaire sur les pros, il fonctionne, tout est parfait. Mais lorsque j'essaie de le connecter à un script, rien ne se passe, il ne me demande même pas si je veux me connecter à ma dll. Apparemment, il ne comprend pas cette exportation. Ma question est donc la suivante : quel type d'exportation comprend-il ? De Visual C++ ? Ou peut-être ai-je fait quelque chose de mal et une exportation spéciale avec des diamants est nécessaire ?

 
Bonjour, dans cette version du stochastique, j'ai décidé d'ajouter des lignes plates (sur le graphique).
sur les zones de surachat/survente.

Il y avait un problème avec la suppression des "anciennes" lignes de l'historique. Qu'est-ce qui ne va pas et à quoi dois-je faire attention ?

//+------------------------------------------------------------------+
//|                                              Stochastic_flat     |
//|                                         Copyright © 2012 Fox.RM  |
//|                                               fox.rm@mail.ru     |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012 Fox.RM"
#property link      "fox.rm@mail.ru"

//----
#property indicator_separate_window
#property indicator_buffers 4

//---- fan style
#property indicator_color1 Red
#property indicator_color2 Black
#property indicator_color3 Blue
#property indicator_color4 DarkGray

#property indicator_style1 0
#property indicator_style2 0
#property indicator_style3 0
#property indicator_style4 0
#property indicator_width4 2
#property indicator_level1 88.2
#property indicator_level2 11.8
 
#property indicator_levelcolor DarkGray
#property indicator_levelstyle 0

//---- basic fan indicator parameters
extern bool Show_STOCH_1=true;
extern int K_period1=13;
extern int S_period1=1;
extern bool Show_STOCH_2=true;
extern int K_period2=34;
extern int S_period2=1;
extern bool Show_STOCH_3=true;
extern int K_period3=89;
extern int S_period3=1;
extern bool Show_STOCH_4=true;
extern int K_period4=233;
extern int S_period4=1;
extern int delete=2;

//---- indicator buffers
double MainBuffer1[];
double MainBuffer2[];
double MainBuffer3[];
double MainBuffer4[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {
//---- stochastic line 1 (fast)
   if(Show_STOCH_1 ==true){Show_STOCH_1=DRAW_LINE; }
   else 
    {Show_STOCH_1=DRAW_NONE; }
   SetIndexBuffer(0,MainBuffer1);
   SetIndexStyle(0,Show_STOCH_1,0);
   SetIndexLabel(0,"fast WPR  ( "+K_period1+" )");
   
//---- stochastic line 2 (basic)
   if(Show_STOCH_2 ==true){Show_STOCH_2=DRAW_LINE; }
   else 
    {Show_STOCH_2=DRAW_NONE; }
   SetIndexBuffer(1,MainBuffer2);
   SetIndexStyle(1,Show_STOCH_2);
   SetIndexLabel(1,"basic WPR ( "+K_period2+" )");
   
//---- stochastic line 3 (flat)
   if(Show_STOCH_3 ==true){Show_STOCH_3=DRAW_LINE; }
   else 
    {Show_STOCH_3=DRAW_NONE; }
   SetIndexBuffer(2,MainBuffer3);
   SetIndexStyle(2,Show_STOCH_3,0);
   SetIndexLabel(2,"slow WPR ( "+K_period3+" )");
   
//---- stochastic line 4 (control)
   if(Show_STOCH_4 ==true){Show_STOCH_4=DRAW_LINE; }
   else
    {Show_STOCH_4=DRAW_NONE; }
   SetIndexBuffer(3,MainBuffer4);
   SetIndexStyle(3,Show_STOCH_4,0,2);
   SetIndexLabel(3,"control WPR ( "+K_period4+" )");

   
//---- name for DataWindow and indicator subwindow label   
   IndicatorShortName("Stochastic_flat");
  }

//----
   return(0);

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+

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

//+------------------------------------------------------------------+
//| Stochastic_fan                                                   |
//+------------------------------------------------------------------+

int start()
  {
   int    i,shift,limit,y=0,counted_bars=IndicatorCounted();
   double x1,x2;
   datetime y1,y11,y2,y22;
//---- Plot defined timeframe on to current timeframe   
 
   limit=Bars-counted_bars;
   //---stroim stohastik
   for(i=0,y=0;i<limit;i++,y++)
     {
      MainBuffer1[i]=iStochastic(NULL,0,K_period1,1,S_period1,0,0,MODE_MAIN,y);
      MainBuffer2[i]=iStochastic(NULL,0,K_period2,1,S_period2,0,0,MODE_MAIN,y);
      MainBuffer3[i]=iStochastic(NULL,0,K_period3,1,S_period3,0,0,MODE_MAIN,y);
      MainBuffer4[i]=iStochastic(NULL,0,K_period4,1,S_period4,0,0,MODE_MAIN,y);
    
     //---flat zona
  
     
     if (MainBuffer1[i] < 11.8) //---pervoe uslovie
     {
     x1=Low[i];
     y1=Time[i]; //--- opredelyaem koordinaty dlya x1,y1
     }
     if (MainBuffer1[i] > 88.2) //---vtoroe uslovie
     {
     x2=High[i];
     y2=Time[i];   //--- opredelyaem koordinaty dlya x2,y2
     }
     }
    for(i=Bars; i>0; i--)
    {
     //--- opredelyaem koordinaty dlya x11,y11 
     if (Low[i]<x1)
     {
     y11=Time[i];
     }
     //--- opredelyaem koordinaty dlya x22,y22
     if (High[i]>x2)
     {
     y22=Time[i];
     }
     }    
     
   
   string up_line = "upline";
  string down_line = "downline";
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
  
    
   dellline(up_line,i);
     
     //----
     
   return(0);
  }
//+------------------------------------------------------------------+
void flatlineup(string labebe,datetime time1,double price1,datetime time2,double price2,color colir, int W)
  {
     ObjectCreate(labebe, OBJ_TREND, 0,time1,price1,time2,price2);
   ObjectSet(labebe, OBJPROP_COLOR, colir);
   ObjectSet(labebe, OBJPROP_STYLE,0);
   ObjectSet(labebe, OBJPROP_RAY,0);
   ObjectSet(labebe, OBJPROP_WIDTH,W);   
   ObjectSet(labebe, OBJPROP_BACK, true);
   }
  void flatlinedown(string labebe1,datetime time1,double price1,datetime time2,double price2,color colir, int W)
  {
   ObjectCreate(labebe1, OBJ_TREND, 0,time1,price1,time2,price2);
   ObjectSet(labebe1, OBJPROP_COLOR, colir);
   ObjectSet(labebe1, OBJPROP_STYLE,0);
   ObjectSet(labebe1, OBJPROP_RAY,0);
   ObjectSet(labebe1, OBJPROP_WIDTH,W);   
   ObjectSet(labebe1, OBJPROP_BACK, true);
    }
   
void dellline(string name_line, int i)  //--- первый вариант с удалением линий
  {
    string name = ObjectName(i);
    if (StringFind(name,name_line)!=-1)ObjectDelete(name);

 // if (StringFind(name,name_line)!=-1)del1++;
 // if (del1>2)ObjectDelete(name);
   }
void dellline(string name_line)  //--- второй вариант с удалением линий  
{
string name, dellname; 
bool del = false;
for(int i=ObjectsTotal(); i>=0;i--)
    {
if (del == false){ //---при этом условии должна происходить идентификация первой линии 
name = ObjectName(i); //--выполняется при первом обращении к функции
dellname=name;
del = true;}
if (del == true){
if (StringFind(dellname,name_line)!=-1)ObjectDelete(dellname);
dellname=name;}
}   
} 
    //---Были и промежуточные варианты, которые также не дали желаемого результата.

Dans la version ci-dessous, cela a fonctionné. Mais pas tout à fait. Les lignes supérieures sont supprimées au fur et à mesure que de nouvelles lignes apparaissent, les lignes inférieures sont supprimées immédiatement. Pourquoi ?

//------ функция удаляющая ненужные линии

void dellline(string name_line_up, string name_line_down) 
{
string name_l;
int obj=ObjectsTotal(OBJ_TREND); // --- в этой версии интуитивно добавил свойство OBJ_TREND
for (int i=obj; i>=0; i--)
{
name_l=ObjectName(i);
if(StringFind(name_l,name_line_up)!=-1)ObjectDelete(name_l);
if(StringFind(name_l,name_line_down)!=-1)ObjectDelete(name_l);
}}

Ici, nous avons une question supplémentaire: pourquoi la fonction n'a pas fonctionné comme elle le devrait sans l'ajout de

OBJ_TREND parce qu'il ne semble pas apporter de changements fondamentaux dans ce cas ?

Puis j'ai fait quelques expériences avec les noms de lignes dans le code principal.

//-------------- первый вариант (рабочий)

string up_line = "upline_", down_line = "downline_";
 
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

//---TimeToStr(Time[i]) указывал в имени тренд лайн в теле функции

//--------------- второй вариант (нерабочий)

string up_line = "upline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
string down_line = "downline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
 
     flatlineup(up_line, y2,x2,y22,x2,Red,1);
     flatlinedown(down_line, y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

TimeToStr(Time[i]) a été spécifié dans une variable du code principal.


Question. Pourquoi la deuxième variante n'a-t-elle pas fonctionné (ce qui signifie que la fonction

dellline(), lorsqu'il est appliqué à la deuxième variante, ne supprime pas les lignes dont les noms sont attribués à la fonction

aux variables up_line et down_line ?

И dernière question Je vais le dupliquer à partir d'un post précédent, c'est sur la capture d'écran. La réponse à cette question peut être trouvée

ne pouvait pas.

Merci !

 
rustein:

Merci, j'ai essayé avec la condition :

Il y a toujours une erreur.

Essayez comme ceci

if( SummBullLots() >0){double BullAveragePrice = NormalizeDouble(BullSummOpenPrice()/SummBullLots(),Digits);}



 
yosuf:
Pouvez-vous me dire s'il existe un indicateur qui affiche le nombre de positions ouvertes à un moment donné ? Encore mieux, s'il montre combien d'entre eux sont BAY et combien sont SELL.
C'est le cas.
Dossiers :
iexposure4.mq4  11 kb
 
Solree:

Bon après-midi. Je veux connecter mon .dll à un script. J'ai essayé de tester cet exemple :

Ça marche, une fenêtre s'ouvre. J'ai écrit mon dll :

Je l'ai vérifié en me connectant au programme habituel sur les plus, tout fonctionne, tout est bien. Mais lorsque j'essaie de le connecter à un script, rien ne se passe, il ne me demande même pas si je veux me connecter à ma dll. Apparemment, il ne comprend pas cette exportation. Ma question est donc la suivante : quel type d'exportation comprend-il ? De Visual C++ ? Ou peut-être ai-je fait quelque chose de mal et une exportation spéciale avec des diamants est nécessaire ?

Dans le dossier MT4, il y a un exemple de code C++ pour tous les cas dans MQL4. Compilez ce code et collez-y votre propre code. Vous verrez immédiatement la différence entre le vôtre et l'exemple.

 
Je veux enregistrer les actions de l'EA dans un fichier
J'ai pris un exemple dans le manuel de l'éditeur MQL et l'ai légèrement modifié pour répondre à mes besoins.
int init()  {
    int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","Цена открытия","Время открытия","Символ","Лоты");
   return(0);  }

int deinit()  {   return(0);  }

int start()  {
  .........................
...........................
  int handle=FileOpen("OrdersReport.csv",FILE_READ | FILE_WRITE,"\t");
  if(handle<0) return(0);
 
     // записываем в файл только открытые ордера
  for(int pos=0;pos<OrdersTotal();pos++)
    {
     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
     FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(),OrderLots());
    }
     FileClose(handle);   //Закрытие файла, ранее открытого функцией FileOpen().
}
   return(0);
  }


En conséquence, le fichier OrdersReport.csv est vide, bien que les commandes soient ouvertes.
 
griha:
Je veux enregistrer les actions de l'EA dans un fichier
J'ai pris un exemple dans le manuel de l'éditeur MQL, que j'ai légèrement modifié pour mes propres besoins.


En conséquence, le fichier OrdersReport.csv est vide, bien que les commandes soient ouvertes.

Essayez de cette façon :

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
int handle;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init() 
  {
   handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
   if(handle<0) return(0);
// запишем заголовок в файл
   FileWrite(handle,"#","Цена открытия","Время открытия","Символ","Лоты");
   return(0);  
  }

int deinit() { 
   FileClose(handle);   //Закрытие файла, ранее открытого функцией FileOpen().
 return(0);  
 }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start() 
  {
   if(handle<0) return(0);
// записываем в файл только открытые ордера
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) 
         FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(),OrderLots());
   return(0);
  }
//+------------------------------------------------------------------+
 
Fox_RM:
Bonjour, dans cette version du stochastique, j'ai décidé d'ajouter la construction de lignes plates (sur le graphique).

Je n'ai pas pu.

Merci !

//------ функция удаляющая ненужные линии

void dellline(string name_line_up,string name_line_down)
  {
   string name_l;
   int obj=ObjectsTotal(); // найдем количество объектов 
   for(int i=obj-1; i>=0; i--) // obj-1 т.к. >=0 
     {
      name_l=ObjectName(i); // узнаем имя
      if(ObjectType(name_l)!=OBJ_TREND)continue; // если не трендлиния продолжим цикл * for(int i=obj-1; i>=0; i--)
      if(StringFind(name_l,name_line_up)!=-1)ObjectDelete(name_l);
      if(StringFind(name_l,name_line_down)!=-1)ObjectDelete(name_l);
     }
   }
//+------------------------------------------------------------------+
Créer des lignes de tendance avec le nom = temps1+prix1+temps2, facile à supprimer dans deinit.
 
Mathemat:
Roman, je ne peux vous donner qu'un seul conseil : allez sur le site web de DC et cherchez leur histoire.
Je l'ai fait. J'ai déjà écrit à leur service clientèle. Merci, Mathemat.