[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 116

 
Roman.:

Leute, könnt ihr mir sagen, warum es einen Fehler über nicht in der Lage, einen Indikator in einem EA zu öffnen sein könnte?

Diese Bedingung ist erfüllt:

-Liste der Parameter (falls erforderlich). Die übermittelten Parameter müssen mit der Reihenfolge der Deklaration und dem Typ der externen (externen) Variablen des benutzerdefinierten Indikators übereinstimmen.


Sie sollten den Namen des Indikators überprüfen. Es könnte sein
 
Vinin:

Ich müsste den Namen des Indikators überprüfen. Ich weiß nicht, was das sein könnte.


Ich habe den Namen überprüft. Das ist in Ordnung. Ich finde es heraus...

P.S. Ich habe ein fünfstelliges DC-Terminal eingerichtet, alles dorthin verschoben, alles noch einmal überprüft, viele Code-Änderungen vorgenommen, es tritt kein solcher Fehler mehr auf.

 
O MQL-Programmiergurus, helfen Sie einem Neuling bei der Lösung eines Problems. Das Programm funktioniert nicht richtig, es tut nicht das, was es tun soll. Können Sie mir bitte sagen, wo mein Fehler liegt? Das Programm braucht:
1. Eröffnen Sie einen Auftrag, weisen Sie der Variablen PriceBuy den Wert des Eröffnungskurses zu und geben Sie eine entsprechende Meldung aus.
2. Eröffnen Sie einen neuen Auftrag mit denselben Bedingungen, wenn TakeProfit erreicht ist.
Hier ist der Programmcode:

extern double PriceBuy = 0;
extern bool Buy = true;
extern bool number = false;

int start()
{
if(Buy)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Bid-100*Point,Bid+100*Point);
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)
PriceBuy=OrderOpenPrice();
Alert("Buy Price = ",PriceBuy);
Buy = false;
number = true;}

if (Bid+100*Point<=PriceBuy && number)
{PriceBuy = 0;
number = false;
Buy=true;}


return;
}
Vielen Dank im Voraus
 
OTPOK:

O MQL-Programmiergurus, helfen Sie einem Neuling bei der Lösung eines Problems. Das Programm funktioniert nicht richtig, es tut nicht das, was es tun soll. Können Sie mir bitte sagen, wo mein Fehler liegt? Das Programm muss:
1. Öffnen Sie einen Auftrag, weisen Sie der Variablen PriceBuy den Wert des offenen Preises zu und geben Sie eine entsprechende Meldung aus.
Um einen neuen Auftrag mit den gleichen Bedingungen zu eröffnen , wenn TakeProfit erreicht ist.
Hier ist der Programmcode:


extern double PriceBuy = 0;
extern bool Kaufen = true;
extern bool number = false;

int start()
{
if(Kaufen)
{
int ticket=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-100*Point,Ask+100*Point);
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
PriceBuy=OrderOpenPrice();
Alert("Buy Price = ",PriceBuy);
Kaufen = false;
number = true;}

if(Gebot+100*Punkt<=PreisKaufen && Zahl)
{PreisKaufen = 0;
Zahl = false;
Buy=true;}


Rückkehr;
}
Vielen Dank im Voraus

Gebot>=PreisKaufen+100*Punkt
 

Ich möchte die Funktion CreateNamedPipe() von kernel32.dll verbinden. Ich muss Flaggen vom Typ Dword vorschreiben.

Ich mache es auf diese Weise:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Natürlich schwört der Compiler auf das L am Ende. Würden Sie mir sagen, was ich tun soll?

 
Vinin:

Ich muss den Namen des Indikators überprüfen. Das mag sein.


Ja, wirklich, Victor, mein Fehler war, dass ich versucht habe, es automatisch anzusprechen... :-))) zum Indikator über

...
string short_name;
...
short_name="NonLagMA";
IndicatorShortName(short_name);
...

... Ich habe die "kurzen" und "normalen" Namen nicht gefunden, wenn ich die Indikatorwerte über iCustom() anspreche, d.h. wenn sie nicht übereinstimmen, sollte der Indikator nur mit seinem "normalen" Namen angesprochen werden.

Ich danke Ihnen.

 

Hallo.

Bitte helfen Sie mir, einen Fehler zu finden.

Der Code ist so konzipiert, dass alle Positionen geschlossen werden, wenn der Kurs die im Diagramm eingezeichnete Linie überschreitet. Meistens ist das der Fall. Aber regelmäßig gibt es 2 Pannen: 1. Der Kurs überschreitet die Linie, aber die Positionen werden nicht geschlossen. 2. Die Linie schneidet das aktuelle Kursniveau (in einem Winkel), fällt aber nicht mit ihm zusammen (wirkt sich nicht auf die aktuelle Kerze aus), während alle Positionen geschlossen sind (was nicht passieren sollte).

int start() {
//============== Закрытие по линии Close ========================================
   int bar1,bar2,bar3;
   if (Draw_Close && ObjectFind("LINES CLOSE")==-1)
   {
      bar3 = searcFR(0,1);bar2 = searcFR(bar3,-1);bar1 = searcFR(bar2,1);
      drawline("LINES CLOSE",Color_Close,Time[bar1],High[bar1]+15*Point,Time[bar3],High[bar3]+15*Point);
   }
   string order = checkapp();
   if (order=="LINES CLOSE")
   {DeleteAllOtlozh_b();
    CloseAll_b(DeleteOtlozh,Proskalz);
    ObjectDelete("LINES CLOSE");
    ObjectDelete("LINES CLOSE n");
    Draw_Close  = false;
    if(UseAlert){
    Alert("Уровень достигнут, заблокирован");
    } 
   } 
}     
//==================================================================================


//=========== Вычисление линии Close  =================================================================
int searcFR(int bar, int UP_DN)
{  while(true)//ищем 1 фрактал после bar
   {  bar++;
      if (Fractal(bar) == UP_DN) return(bar);} 
   return(0);  
}
//--------------------------------------------------------------------------
int Fractal(int br)
{  if (br <= 2) return(0);
   if (High[br] >= High[br+1] && High[br] > High[br+2] && High[br] >= High[br-1] && High[br] > High[br-2]) return( 1);
   if (Low [br] <= Low [br+1] && Low [br] < Low [br+2] && Low [br] <= Low [br-1] && Low [br] < Low [br-2]) return(-1);
   return(0);
}
//-------------------------------------------------------------------
int drawline(string Name, color col,int X1,double Y1,int X2,double Y2)
{
   if (ObjectFind(Name)==0)return; //Если обьект существует
   int X1g=Time[0];
   int X2g=Time[0]+Period()*1200;
   double Y1g=Y1+(Y2-Y1)*(X1g-X1)/(X2-X1);
   double Y2g=Y1+(Y2-Y1)*(X2g-X1)/(X2-X1);
   ObjectCreate(Name, OBJ_TREND, 0,X1g,Y1g,X2g,Y2g);
   ObjectSet   (Name, OBJPROP_COLOR, col);
   ObjectSet   (Name, OBJPROP_STYLE, STYLE_SOLID);
   ObjectSet   (Name, OBJPROP_WIDTH, 2);
   ObjectSet   (Name, OBJPROP_BACK,  false);
   ObjectSet   (Name, OBJPROP_RAY,   false);
   return;
}
//----------------------------------------------------------------------- проверка всех линий
string checkapp()
{
   int X_1,X_2,X_3;
   double Y_1,Y_2,Y_3;
   double shift_Y = (WindowPriceMax()-WindowPriceMin()) / 50;
   color col;
   for(int n=ObjectsTotal()-1; n>=0; n--) 
   {
      string Obj_N=ObjectName(n);
      if (ObjectType(Obj_N)!=OBJ_TREND) continue;
      if (StringFind(Obj_N,"LINES ",0)!=-1)//найден обьект-тренд к которому вычисляется приближение
      {
         X_1 = ObjectGet(Obj_N, OBJPROP_TIME1); 
         X_2 = ObjectGet(Obj_N, OBJPROP_TIME2); 
         ObjectDelete (Obj_N+" n");
         if (X_1>X_2 ||  X_2<Time[0]) {continue;}//ObjectDelete(Obj_N);
         Y_1 = ObjectGet(Obj_N, OBJPROP_PRICE1);
         Y_2 = ObjectGet(Obj_N, OBJPROP_PRICE2);
         col= ObjectGet(Obj_N, OBJPROP_COLOR);
         ObjectCreate (Obj_N+" n", OBJ_TEXT,0,X_1-Period()*60,Y_1+shift_Y,0,0,0,0);
         ObjectSetText(Obj_N+" n",StringSubstr(Obj_N,6,5) ,7,"Arial");
         ObjectSet    (Obj_N+" n", OBJPROP_COLOR, col);
         if (X_1<=Time[0] && X_2>=Time[0])//попадает во временной диапазон
         {
            X_3=Time[0];Y_3=Y_1+(Y_2-Y_1)*(X_3-X_1)/(X_2-X_1);//уравнение прямой
            if (Y_3>=Bid&&Y_3<=Ask)
            { 
               return(Obj_N);
            }
         }
      }
   }
}

Ich danke Ihnen im Voraus.

 
nemo811:

Bitte helfen Sie mir, den Fehler zu finden.

Ich ziehe die Frage zurück, ich habe es herausgefunden.

 
toropchin:

Ich möchte die Funktion CreateNamedPipe() von kernel32.dll verbinden. Ich muss Flaggen vom Typ Dword vorschreiben.

Ich mache es auf diese Weise:

#define ACCESS_SYSTEM_SECURITY 0x01000000L

Natürlich schwört der Compiler auf das L am Ende. Was schlagen Sie vor?

Zhunko:

Entfernen Sie die Ziffer. Es können nur 8 Bits sein. MQL4 funktioniert nicht mit großen.

Sie müssen eine zusätzliche Null entfernen. Versuchen Sie es so: 0x1000000L


So funktioniert das nicht. Compiler gibt Fehler '0x1000000L' - ungültige Zahl
 
toropchin:

So funktioniert das nicht. Der Compiler erzeugt den Fehler '0x1000000L' - ungültige Zahl

Nachts überhaupt nicht denken... :-)) Im 16-Bit-System gibt es keine solche Zahl. Er ist ein Bezeichner eines konstanten Typs.

L sollte entfernt werden:0x01000000

Grund der Beschwerde: