[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 88

 

Alles war hier C:\Benutzer\======AppData\Local\VirtualStore\Programmdateien\====== - MetaTrader\

vista

 

Bitte beraten Sie mich.

Ich habe ein einfaches Skript geschrieben (setzen Sie zwei Anhänger in der Nähe des Marktes, um es auf dem Chart vor der Veröffentlichung von Nachrichten, so dass ich nicht haben, um es manuell zu tun). Es scheint zu sein, viel einfacher, aber es funktioniert nicht, keine Aufträge geöffnet werden und das Journal nur sagt, dass das Skript erfolgreich geladen wird, und dann sofort in der gleichen Sekunde entfernt! Er lässt sich ohne Fehler kompilieren. Ich habe es in die Expertenform umgewandelt, d.h. ininit und deinit hinzugefügt, um es im Tester zu überprüfen, es hat funktioniert. Aber, wie Sie verstehen, brauche ich keinen Expert Advisor, sondern nur ein Skript.

Was ist hier falsch? Ich danke Ihnen im Voraus.

Hier ist der Code des Skripts:

#property copyright "alexey15"
#property link ""
#property show_confirm

extern int SL = 15;
extern int TP = 90;
extern int DELTA = 15;
extern double LOT = 0.1;
extern int SLIP = 3;

//+------------------------------------------------------------------+
//| Skriptprogramm-Startfunktion |
//+------------------------------------------------------------------+
int start()
{
//----
double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,VERKAUFSPREIS,SLIP,VERKAUFSPREIS+SL*Punkt,VERKAUFSPREIS-TP*Punkt,NULL,0,0,Red);


//----
zurück(0);
}
//+------------------------------------------------------------------+

 
wiwkin52:

Hallo. Bitte um Hilfe. Ich habe den mt und alle dazugehörigen Indikatoren deinstalliert, alle. Jetzt habe ich es installiert und alles ist noch da. Was sollte ich tun? Vielleicht gibt es irgendwo Kopien der Indikatoren und alles andere?

Haben Sie das Programm nur deinstalliert oder haben Sie auch den MT-Ordner aus den Programmdateien gelöscht?
 
alexey15:

Bitte beraten Sie mich.

Ich habe ein einfaches Skript geschrieben (zwei Anhänger in der Nähe des Marktes setzen, um es auf dem Chart vor der Veröffentlichung von Nachrichten zu setzen, damit ich es nicht manuell tun muss). Es scheint viel einfacher zu sein, aber es funktioniert nicht, keine Aufträge werden geöffnet und das Journal sagt nur, dass das Skript erfolgreich geladen wird, und dann sofort in der gleichen Sekunde entfernt! Er lässt sich ohne Fehler kompilieren. Ich habe es in die Expertenform umgewandelt, d.h. ininit und deinit hinzugefügt, um es im Tester zu überprüfen, es hat funktioniert. Aber, wie Sie verstehen, brauche ich keinen Expert Advisor, sondern nur ein Skript.

Was ist hier falsch? Ich danke Ihnen im Voraus.

Hier ist der Code des Skripts:


Ich habe es überprüft. Ihr Skript funktioniert.

Drucken Sie den Fehler vorsichtshalber aus:

int start()
{
//----
double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int TicketBS,TicketSS;
TicketBS=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
TicketSS=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);
 if(TicketBS<=0 || TicketSS<=0)Print("Error = ",GetLastError());
//----
return(0);
}

 
alexey15:

Bitte beraten Sie mich.

Ich habe ein einfaches Skript geschrieben (Einstellung von zwei Anhängern in beide Richtungen in der Nähe des Marktes, um sie vor der Veröffentlichung von Nachrichten auf das Diagramm zu setzen, damit ich es nicht manuell tun muss). Es scheint viel einfacher zu sein, aber es funktioniert nicht, keine Aufträge werden geöffnet und das Journal sagt nur, dass das Skript erfolgreich geladen wurde, und dann sofort in der gleichen Sekunde entfernt! Er lässt sich ohne Fehler kompilieren. Ich habe es in die Expertenform umgewandelt, d.h. ininit und deinit hinzugefügt, um es im Tester zu überprüfen, es hat funktioniert. Aber, wie Sie verstehen, brauche ich keinen Expert Advisor, sondern nur ein Skript.

Was ist hier falsch? Ich danke Ihnen im Voraus.

Es funktioniert mit einer vierstelligen Zahl. Ich habe es nicht auf fünfstelligen Ebenen geprüft, aber ich habe eine Prüfung für Einschränkungen auf StopLevel hinzugefügt:

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern int SL     = 15;
extern int TP     = 90;
extern int DELTA  = 15;
extern double LOT = 0.1;
extern int SLIP   = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (DELTA <= StopLevel) DELTA = StopLevel+1;

double BUYPRICE = Ask + DELTA*Point;
double SELLPRICE = Bid - DELTA*Point;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*Point,BUYPRICE+TP*Point,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*Point,SELLPRICE-TP*Point,NULL,0,0,Red);

//----
return(0);
}
//+------------------------------------------------------------------+
Im Prinzip können Sie Punktanpassungen für vier-, fünfstellige Zahlen vornehmen, um Fehler zu vermeiden. Denn die Delta-Stufe sollte bei einer fünfstelligen Zahl zehnmal größer sein, also 150 statt 15, und die Stopps und Takes entsprechend...

Dann würde es so aussehen:

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
extern int SL     = 15;
extern int TP     = 90;
extern int DELTA  = 15;
extern double LOT = 0.1;
extern int SLIP   = 3;

//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
double PointX;

if(Digits==5 || Digits==3) PointX = Point * 10;    // Корректировка Point под трёх- пятизнак
if(Digits==4 || Digits==2) PointX = Point;

int StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (DELTA <= StopLevel) DELTA = StopLevel+1;

double BUYPRICE = Ask + DELTA*PointX;
double SELLPRICE = Bid - DELTA*PointX;
int OPEN_ORDER;

OPEN_ORDER=OrderSend(Symbol(),OP_BUYSTOP,LOT,BUYPRICE,SLIP,BUYPRICE-SL*PointX,BUYPRICE+TP*PointX,NULL,0,0,Blue);
OPEN_ORDER=OrderSend(Symbol(),OP_SELLSTOP,LOT,SELLPRICE,SLIP,SELLPRICE+SL*PointX,SELLPRICE-TP*PointX,NULL,0,0,Red);

//----
return(0);
}
//+------------------------------------------------------------------+
 

Guten Morgen!

Hat jemand Tipps zu den Indizes...?

 
volshebnik:

Guten Morgen!

Hat jemand Tipps zu den Indizes...?

Richtig, die Indizes.
 
splxgf:
Richtig, die Indizes.
Nicht lustig ) Die Frage stand hier - https://www.mql5.com/ru/forum/131277/page87. Da die Forumsadministratoren aber nicht empfehlen, Fragen zu wiederholen, habe ich sie nicht noch einmal gestellt.
 
volshebnik:

Hallo!

Können Sie mir bitte sagen, was los ist? Ich verwende den Tester für den GBPUSD - er eröffnet die Trades so, wie es sein sollte. Ich benutze es auf dem Dollar-Index DXH1 - es öffnet nicht viele Geschäfte, der Fehler "130" - Falsche Haltestellen. Außerdem ist nicht klar, was falsch ist - es öffnet sich und öffnet sich nicht in ähnlichen Situationen, aber mehr als das. Spread und Stop Level für Dollar Index -100 und 200. Spread und Stop Level für GBPUSD -3 und 4. Preise im Dollar-Index, z.B. 78,150, in der Paarung - 4 Dezimalstellen. Aber es wird berücksichtigt.

Hier ist ein Teil des Codes:


Nur so aus dem Stegreif:

1) SL und TP sind nicht normiert;

2) OrderSend verwendet Digits für die Normalisierung, während die Bestellung von Symb aufgegeben wird.

Versuchen Sie es auf diese Weise:

int opDigits=MarketInfo(Symb,MODE_DIGITS);
SL = NormalizeDouble(SL,opDigits);
TP = NormalizeDouble(TP,opDigits);
ОткрФрвверх = NormalizeDouble(ОткрФрвверх,opDigits);
ticketup=OrderSend(Symb, OP_BUYSTOP, Lot, ОткрФрвверх,0, SL, TP,NULL,A,0,вверх); // Ордер вверх
 
PapaYozh:


Ich schätze mal:

1) SL und TP sind nicht normalisiert;

2) OrderSend verwendet Digits für die Normalisierung, während die Reihenfolge von Symb festgelegt wird.

Versuchen Sie es auf diese Weise:

Herzlichen Dank! Es funktioniert, aber selten, manchmal tritt der gleiche Fehler auf - 130....... ( Ist es immer notwendig, die Haltestellen zu normalisieren oder nur bei Indizes? (nur bei Währungspaaren haben Stopps meiner Meinung nach immer ohne Normalisierung funktioniert).
Grund der Beschwerde: