Au revoir le robot - bonjour le marasme - page 4

 
Mislaid:

Le contrôle des limites du tableau en spécifiant une chaîne dans le code est très utile. Avant, c'était : divisez par zéro, et regardez où vous voulez. Et c'est encore pire si l'erreur n'est pas apparue.

Pourriez-vous fournir un exemple de la manière de procéder ? Je n'ai rien trouvé sur cette fonctionnalité dans la documentation.
 
Andrei01:
Pourriez-vous donner un exemple de la manière de procéder ? Je n'ai rien trouvé sur cette fonctionnalité dans la documentation.

Exactement ! Vous n'avez pas besoin de faire quoi que ce soit maintenant. Ouvrez l'onglet "experts" et lisez les journaux. Si une erreur apparaît, vous verrez un message à ce sujet. Comme :

array out of range....... indiquant le numéro de ligne dans le code.

 
Mislaid:

Ouvrez l'onglet "experts" et lisez les journaux.

Cela fonctionne-t-il pour les indicateurs et les scripts ?
 
Pavlick:

Essayez de changer la casse de la première lettre du nom du script/indicateur. Je me suis déjà battu une fois aussi https://www.mql5.com/ru/forum/152533/page2#982156

P.S : bien, changez string en char[]

Réponds, Pavlik !

C'est bien pour toi Pavlik !

Votre code a fonctionné tout de suite !

Vous pouvez maintenant exécuter le

script !

Il reste à l'installer dans l'indicateur !

Votre code a été inséré dans l'indicateur !

il n'y a qu'un seul petit obstacle

l'indicateur ne veut pas reconnaître le nom

du script. J'ai écrit le nom à l'emplacement

d'où le script doit être appelé.

Il ne reste plus qu'à ce que le script soit

reconnu !

pouvez-vous m'aider ?

sincères salutations

punsa

 
pansa:

Réponds, Pavlik !

Tu es génial, Pavlik !

votre code a fonctionné tout de suite !

vous pouvez maintenant exécuter le

le scénario !

Il reste à l'installer dans l'indicateur !

Votre code a été inséré dans l'indicateur !

il n'y a qu'un seul petit obstacle

l'indicateur ne veut pas reconnaître le nom

du script. J'ai écrit le nom à l'emplacement

d'où le script doit être appelé.

Il ne reste plus qu'à ce que le script soit

reconnu !

pouvez-vous m'aider ?

sincères salutations

Panza




Je vous aiderai si vous en avez besoin.
 
Il y a encore un très bon point faible avec ces avertissements (du moins il y en avait un). La priorité des expressions logiques a changé. Lorsque la priorité n'est pas explicitement définie par des parenthèses, le compilateur ne donne qu'un avertissement, bien que l'expression logique ait maintenant un effet complètement différent de celui d'avant. Ce doit être une erreur. Quelqu'un a peut-être décidé de ne pas tenir compte des avertissements, et parmi eux se trouve un avertissement concernant une expression logique.
 
Vinin:

Je t'aiderai si tu as besoin d'aide.

Salut, Vinin !

merci beaucoup

pour avoir voulu aider !

Je vous envoie pour une vue d'ensemble de la façon dont la

appel au script du composteur

pansa

____________________________________

Bonjour Pavlik !

Je voudrais vous montrer un exemple

comment l'appel de scénario a été organisé

avec le composteur, maintenant ça ne marche pas.

pour examen

pansa

//+------------------------------------------------------------------+

//|sample_execute_script.mq4 |

//+------------------------------------------------------------------+

#import "user32.dll"

int RegisterWindowMessageA(string MessageName) ;

int PostMessageA(int hwnd, int msg, int wparam, string Name) ;

void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo) ;

#import

int start()

{

int winHandle = WindowHandle( Symbol(), Period() ) ;

//

//

//

si( signal < 0 && trigl==vrai && acheter ==vrai ) {StartScript( winHandle, "SchliesenProfitOrders" ) ; }

//

//

//

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)

{

int MessageNumber = RegisterWindowMessageA("MetaTrader4_Internal_Message") ;

PostMessageA(hWnd, MessageNumber, 16, ScriptName) ;

if (AutomaticallyAcceptDefaults) { ClearConfigDialog() ; }

}

void ClearConfigDialog()

{

Sleep(100) ;

keybd_event(13, 0, 0, 0) ;

}

//

//

//

retour(0) ;

 
pansa:

Salut, Vinin !

merci beaucoup

pour avoir voulu aider !

Je vous envoie pour une vue d'ensemble de la façon dont la

appel au script du composteur

pansa

____________________________________

Bonjour Pavlik !

Je voudrais vous montrer un exemple

comment l'appel de scénario a été organisé

avec le composteur, maintenant ça ne marche pas.

pour examen

pansa


Est-ce vraiment difficile de cliquer sur le SRC et de coller le code? !

//+------------------------------------------------------------------+
//|                                        sample_execute_script.mq4 |
//+------------------------------------------------------------------+
#import "user32.dll"
  int RegisterWindowMessageA(string MessageName);
  int PostMessageA(int hwnd, int msg, int wparam, string Name);
  void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo);
#import

int start()
{
  int winHandle = WindowHandle( Symbol(), Period() );
//
//
//
  if(signal < 0 && trigl==true && buy == true) 
  {
    StartScript(winHandle, "SchliesenProfitOrders" ); 
  }
//
//
//
}
void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
  int MessageNumber = RegisterWindowMessageA("MetaTrader4_Internal_Message");
  PostMessageA(hWnd, MessageNumber, 16, ScriptName);
  if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
} 
void ClearConfigDialog()
{
  Sleep(100);
  keybd_event(13, 0, 0, 0);
}
//
//
//
return(0);
 
pansa:

Cela devrait fonctionner correctement :

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)
{
    char buf[];
    StringToCharArray("MetaTrader4_Internal_Message", buf);
    int MT4InternalMsg = RegisterWindowMessageA(buf);
    StringToCharArray(ScriptName, buf);
    SendMessageA(hWnd, MT4InternalMsg, 16, buf);
    if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
}
void ClearConfigDialog()
{
    Sleep(100);
    keybd_event(13, 0, 0, 0);

}

Et n'oubliez pas la casse de la première lettre du script, par exemple, si le script "test" ne commence pas, vous devriez essayer "Test".

Respectueusement, Pavlik ;))

 
Pavlick:

Cela devrait fonctionner correctement :

Et n'oubliez pas la casse de la première lettre du script, par exemple, si le script"test" ne s'exécute pas, vous devez essayer "Test".

Salutations, Pavlik ))))


Bonjour Pavlik !

J'ai obtenu votre raffinement et

J'ai essayé de tout mettre dans l'indicateur

mais l'indicateur ne veut pas.

voyez ce que vous pouvez faire

pour que ça marche !

Panza

//+------------------------------------------------------------------+

//|AltrTREND_Signal.mq4 |

//| Copyright 2014, MetaQuotes Software Corp.

//|https://www.mql5.com ||

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//|AltrTrend_Signal_v2_2_alert.mq4|

//|Ramdass - Conversion seulement|

//+------------------------------------------------------------------+

#property copyright "Auteur - OlegVS, GOODMAN"

#propriété stricte

#import "user32.dll"

int RegisterWindowMessageA(uchar &lParam[]) ;

int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]) ;

void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo) ;

#import

#property indicator_chart_window

#property indicator_buffers 2

#propriété indicator_color1 DeepSkyBlue

#property indicator_color2 OrangeRed

#property indicator_width1 1

#property indicator_width2 1

//---- paramètres d'entrée

extern bool Alert_message=true ;

extern int Time_alert_minutes=60 ; // ? ???? ? ???? ? ????????? ? ??? ? ?? ? 60 ? ????.

extern int K = 30 ;

extern double Kstop = 0.5 ;

extern inttern Kperiod = 150 ;

extern int PeriodADX = 7 ; //14 ;

extern int CountBars = 100 ;

//---- tampons

double val1[] ;

double val2[] ;

double AlertTime ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur personnalisé|

//+------------------------------------------------------------------+

int init()

{

string short_name ;

//---- ligne d'indicateurs

IndicatorBuffers(1) ;

SetIndexStyle(0,DRAW_ARROW) ;

SetIndexArrow(0,241) ;

IndicatorBuffers(2) ;

SetIndexStyle(1,DRAW_ARROW) ;

SetIndexArrow(1,242) ;

SetIndexBuffer(0,val1) ;

SetIndexBuffer(1,val2) ;

si(CountBars>=Bars)

CountBars=Bars ;

SetIndexDrawBegin(0, Bars - CountBars + PeriodADX ) ;

SetIndexDrawBegin(1, Bars - CountBars + PeriodADX ) ;

//----

retour(0) ;

}

//+------------------------------------------------------------------+

//| AltrTrend_Signal_v2_2|

//+------------------------------------------------------------------+

int start()

{

int i, shift, counted_bars = IndicatorCounted() ;

//----

si(counted_bars<0) return(-1) ;

//----

int i1, i2, t_per ;

double Range, AvgRange, smin, smax, SsMax, SsMin, SSP, price ;

bool uptrend, old ;

//----

si(Bars <=PeriodADX+ 1)

retour(0) ;

//----

for(shift = CountBars - PeriodADX ; shift >= 0 ; shift--)

{

SSP = MathCeil(Kperiod / iADX(NULL, 0, PeriodADX , PRICE_CLOSE, MODE_MAIN, 1)) ;

Plage = 0 ;

AvgRange = 0 ;

for(i1 = shift ; i1 <= shift + SSP ; i1++)

{

AvgRange = AvgRange + MathAbs(High[i1] - Low[i1]) ;

}

Gamme = Gamme moyenne / (SSP + 1) ;

//----

SsMax = High[shift] ;

SsMin = Low[shift] ;

for(i2 = shift ; i2 <= shift + SSP - 1 ; i2++)

{

prix = High[i2] ;

si(SsMax < prix)

SsMax= prix ;

prix = Low[i2] ;

si(SsMin >= prix)

SsMin = prix ;

}

//----

smin = SsMin + (SsMax - SsMin)*K / 100 ;

smax = SsMax - (SsMax - SsMin)*K / 100 ;

val1[shift] = 0.0 ;

val2[shift] = 0.0 ;

si(Close[shift] < smin)

{

tendance à la hausse = faux ;

}

si(Close[shift] > smax)

{

tendance à la hausse = vrai ;

}

if(uptrend != old && uptrend == true)

{

val1[shift] = Low[shift] - Range*Kstop ;

}

si(uptrend != old && uptrend == false)

{

val2[shift] = High[shift] + Range*Kstop ;

}

ancien = tendance à la hausse ;

}

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)

{

{

char buf[] ;

StringToCharArray("MetaTrader4_Internal_Message", buf ;)

int MT4InternalMsg = RegisterWindowMessageA(buf) ;

StringToCharArray("fPlayer", buf) ;

SendMessageA(hWnd, MT4InternalMsg, 16, buf) ;

if (AutomaticallyAcceptDefaults) { ClearConfigDialog() ; }

}

void ClearConfigDialog()

{

Sleep(100) ;

keybd_event(13, 0, 0, 0) ;

}

//---- Alerte

if (Period()<Time_alert_minutes) t_per=Period() ; else t_per=Time_alert_minutes ; // ? ??? ??<Time_alert, ? ???? ? ???? ? ????????? ? ??? ? ?? ? ? ?.

si (Alert_message==true && CurTime()>AlertTime && val1[0]!=0.0)

{

Alert(Symbol(), "+++ BUY ! !! +++" , "//AltrTrend_Signal_v2_2_alert ") ;

AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60 ;

//PlaySound("payment.wav") ;

fPlayer ;//script

}

si (Alert_message==true && CurTime()>AlertTime && val2[0]!=0.0)

{

Alert(Symbol(), "+++ VENTE ! !!+++" , "//AltrTrend_Signal_v2_2_alert") ;

AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60 ;

// PlaySound("payment.wav") ;

fPlayer ;

}

retour(0) ;

}

//+------------------------------------------------------------------+