Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1928

 
Valeriy Yastremskiy #:
L'algorithme touché / croisé - déplacé ne fonctionne pas ?

Difficile, j'aimerais déjà rendre quelque chose de convenable. Il se contente de visualiser les niveaux et de déplacer les arrêts sur les niveaux passés, c'est suffisant. Je ne m'attendais pas à une telle prise. S'il n'était pas parti depuis longtemps, je l'aurais fait, mais pas maintenant. Je ne veux pas d'arbitrage, je l'ai déjà.

 

si step:=:const, alors affiche simplement les niveaux avec le pas donné à partir du stop loss actuel. Qu'est-ce qui pourrait être plus simple que ça ?

 
Maxim Kuznetsov #:

si step:=:const, alors affiche simplement les niveaux avec le pas donné à partir du stop loss actuel. Qu'est-ce qui pourrait être plus simple que ça ?

Oui, l'algorithme, je comprends. Ouvrir une fenêtre, écrire ce qui se passe ? Des conditions légèrement différentes, à approfondir et à écrire.

P.S. En d'autres circonstances, je ne demanderais pas.

 
S'il vous plaît conseiller qui sait, je ne peux pas ouvrir un ordre sur la version de démonstration écrit qu'il est en file d'attente avec une erreur générale ! Quel est le problème ?
 
Maxim Kuznetsov #:

Très probablement - ex4 a été construit avec un vieux compilateur. Le terminal a été mis à jour, mais l'EA est un vieil orphelin. Nous devons contacter l'auteur

La deuxième option - les signatures ne correspondent pas (ou n'ont pas été vérifiées pour des raisons techniques). Il suffit d'attendre la mise à jour des DNS et la connexion sera établie.

Option hypothétique - l'auteur est banni de façon permanente. Regardez son profil

En résumé, il faut d'abord poser des questions à l'auteur.

Merci.

 
Vitaly Muzichenko #:

Difficile, j'aimerais déjà rendre quelque chose de convenable. Il se contente de visualiser les niveaux et de déplacer les arrêts sur les niveaux passés, c'est suffisant. Je ne m'attendais pas à une telle prise. S'il n'était pas parti depuis longtemps, je l'aurais fait, mais pas maintenant. Je ne veux pas d'arbitrage, je l'ai déjà.

Oninit calcule les niveaux et dessine. Pour une tâche différente, mais à proximité. Votre pièce est pour les niveaux absolus.

Zy, je n'ai pas grand chose à redire, bien sûr. J'ai besoin de comprendre comment les ordres, les positions et le chalutage sont suivis, c'est facile à dessiner, mais quand vous atteignez un niveau, vous devez soit changer la couleur du niveau, soit supprimer la ligne horizontale.
Dossiers :
 
Valeriy Yastremskiy #:

OnInit calcule les niveaux et dessine. Pour une tâche différente, mais côte à côte. Votre pièce est pour les niveaux absolus.

Zy, je n'ai certainement pas grand-chose à lui reprocher. J'ai besoin de comprendre comment les ordres, les positions et le chalutage sont suivis, c'est facile à dessiner ensuite. Mais lorsque vous atteignez un niveau, vous devez soit changer la couleur du niveau, soit supprimer la ligne horizontale.

Ce qui pourrait)))) besoin d'ajouter des drapeaux de déclenchement à crossfunction. n'ont pas le temps.

input double   PriceOrder=0.0;         // Цена ордера, 
input int TralStep=300;                  // Шаг отслеживания SL  
input int NumberLevels=7;            // Kоличество уровней для выбранного метода ВВЕРХ

input bool FlagShowLine=true;              // Рисовать / не рисовать уровни



//---


double LevelPrice[10];                 // Количество уровней не более 10.
string HLineName[10];
bool Del=true;

string MsgAlert,Tip;

int CurLevel;


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---Расчет ценовых уровней

CalculationOfLevels(PriceOrder,TralStep,NumberLevels,Tip);



if(FlagShowLine)
{
ShowLine(Tip);
}
//--- create timer
   EventSetTimer(60);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  
  Comment("");
  
   int obj_total=ObjectsTotal();
      PrintFormat("Всего %d объектов",obj_total);
      for(int i=obj_total-1; i>=0; i--)
        {
         string name=ObjectName(i);
 //        PrintFormat("Объект %d: %s",i,name);
         ObjectDelete(name);
        }
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CrossingLevel(CurLevel,Tip);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+ 
//| Создает горизонтальную линию                                     | 
//+------------------------------------------------------------------+ 
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=true,        // на заднем плане 
                 const bool            selection=false,    // выделить для перемещений 
                 const bool            hidden=false,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- если цена не задана, то установим ее на уровне текущей цены Bid 
   if(!price) 
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим цвет линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль отображения линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим перемещения линии мышью 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  } 
  
  //+------------------------------------------------------------------+
  //| Поиск ближайших уровней                                          |
  //+------------------------------------------------------------------+  
void  ShowModify(string name, string tip, bool del)
  {
  if(del){
ObjectDelete(name);
  }
  if(!del){
 if(tip=="Sell"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrGold);
 } 
  if(tip=="Buy"){
  ObjectSetInteger(0,name,OBJPROP_COLOR,clrCoral);
 } 
 }
 }
 
 //+------------------------------------------------------------------+
 //| Мониторинг пересечения уровней                                   |
 //+------------------------------------------------------------------+
 
bool CrossingLevel(int level, string tip)
{
if((tip=="Buy" && Bid > LevelPrice[level]) || (tip=="Sell" && Ask < LevelPrice[level])){
CurLevel=level++ ;
return(true);
}
return(false);
}



void CalculationOfLevels(double priceorder, int trstep, int numberl, string tip){

//---Расчет ценовых уровней

for(int i=0; i<=(numberl); i++){
if(tip=="Buy"){
LevelPrice[i] =  priceorder + trstep*Point;
if(tip=="Sell"){
LevelPrice[i] =  priceorder - trstep*Point;

}
}
CurLevel=1;
}
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ShowLine(string tip)
{
color ClrLine=clrRed;
if(tip=="Buy") ClrLine=clrBlue;
if(tip=="Sell") ClrLine=clrRed;
for(int i=0;i<=(NumberLevels);i++){

//Alert("ShowLine_",ShowLine,"__",LevelPrice[i],"__",ClrLine);
HLineName[i]="LevelPrice_"+(string)i+"_"+(string)LevelPrice[i];

HLineCreate(0,HLineName[i],0,LevelPrice[i],(color)ClrLine,STYLE_SOLID,1);
}
}
Dossiers :
ShowLevel.mq4  16 kb
 
Valeriy Yastremskiy #:

Ce que je pourrais)))) besoin d'ajouter des drapeaux de déclenchement à la fonction croisée. n'ont pas le temps.

C'est un peu à côté de la plaque.

J'ai un EA écrit il y a longtemps, mais c'est un EA avec affichage de l'endroit où les positions seront ouvertes.


Maintenant je dois faire un ajout dans le code du chalut pour dessiner ces lignes où le chalut sera déclenché.

La tâche est compliquée par le fait que l'EA de chalutage est défini sur un graphique et que les lignes doivent être dessinées sur tous les graphiques où il y a des positions ouvertes.

Dossiers :
 
Vitaly Muzichenko #:

C'est un peu exagéré.

J'en ai un écrit depuis longtemps comme celui-ci, mais c'est un EA avec un affichage de l'endroit où les positions seront ouvertes.


Maintenant nous devons faire un ajout dans le code du chalut pour dessiner ces lignes où le chalut sera déclenché.

La tâche est compliquée par le fait que l'EA de chalutage est défini sur un graphique et que les lignes doivent être dessinées sur tous les graphiques où il y a des positions ouvertes.

Toutes les fenêtres sont-elles déjà ouvertes, ou sont-elles ouvertes par l'EA au fur et à mesure que des positions se présentent ? Le défi consiste à trouver un tableau)
 
Valeriy Yastremskiy #:
Toutes les fenêtres sont-elles déjà ouvertes, ou sont-elles ouvertes par l'EA au fur et à mesure que les positions se présentent ? Le défi consiste à trouver un tableau)

Je suppose que s'il y a un poste, la fenêtre est ouverte.