[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 863

 
IgorM:

Wie lassen sich wichtige Daten/Variablen am besten speichern, wenn das Terminal sich aufhängt (Stromausfall)?

- globalen Variablen des Terminals? in eine Datei?

- Wie oft müssen sie gespeichert werden? (der letzte Equity-Wert und einige bools sind wichtig)

Was ist das Problem, alle zu einem Array, und das Array in eine Datei auf jedem Tick, lesen Sie die Datei in der Initialisierung, und keine Probleme
 

Hallo!

Ich kann nicht verstehen, warum ich eine offene Position nicht ändern kann, ich habe den Auftrag eingegeben (in der Auftragsauswahlfunktion)

//+------------------------------------------------------------------+
|| news trade.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#property link "http://www.metaquotes.net"


extern bool In_BUYSTOP=true;
extern intProfit_buy=100;
extern int StopLoss_buy=5;
extern double Lots_buy=0.01;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true;
extern inttern TakeProfit_sell=100;
extern int StopLoss_sell =5;
extern double Lots_sell =0.01;
extern int LevelProfit = 25; // - Gewinnniveau in Punkten, das erreicht werden muss, um seinen Stopp auf das Breakeven-Niveau zu verlegen.
extern int LevelWLoss = 1; // - Breakeven-Level in Punkten, auf das die Stop-Position verschoben wird, nachdem ihr Gewinn das LevelProfit-Level in Punkten erreicht hat.

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUY
int profitsell=((OrderOpenPrice()- Ask)/Point); // SELL
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
//----
{
int-Ticket;
wenn (Bid >iHigh(NULL,PERIOD_D1,1))
{
if(AufträgeSumme() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59)
}
wenn (Ask <iLow(NULL,PERIOD_D1,1))
{
if(AufträgeSumme() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59)
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
zurück(0);
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType();
order_type=OP_SELL;
int profitsell=((OrderOpenPrice()- Ask)/Point);
wenn (Gewinn>5)
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue);
zurück(0);
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY;
int profitbuy=((Bid - OrderOpenPrice())/Point);
wenn (Gewinnkauf>5)
int stopmodify=OrderOpenPrice();
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue);
zurück(0);
}
 

Liebe Entwickler, eine Frage an Sie.

Ich kann nicht erreichen, dass die globale Variable des Indikators korrekt funktioniert, wenn ich den Indikator von einem Expert Advisor aus aufrufe.

Hier ist der Code des Indikators (nur die Strings, die für das Verständnis der Frage wichtig sind).

double  price;
double  PriceBuffer[];

int init()
{
   SetIndexBuffer(0,PriceBuffer);
   return(0);
}
int start()
{
   int limit, i;
   int counted_bars=IndicatorCounted();
   
   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;

   for(i=limit-1; i>=0; i--)
   {
        PriceBuffer[i] = price;
        price = iClose(NULL,0,i);
   }
   return(0);
}

Bei jedem Takt speichert er den aktuellen Preis in der globalen Variablen price und zeigt ihn beim nächsten Takt an. Das Kursdiagramm sollte also um einen Balken verzögert werden. Wenn wir den Indikator mit dem Diagramm verbinden, funktioniert alles einwandfrei:

Aber wenn dieser Indikator aus dem EA aufgerufen wird und einen visuellen Test durchführt, werden wir am Ende des Tests sehen: der Indikator ist nur wenig ähnlich zu dem, was er sein soll.

Wenn wir nun den Indikator auf dem visuellen Testchart neu berechnen (z. B. seine Eigenschaften öffnen und schließen), kehrt alles zum Normalzustand zurück - wir sehen wieder das erste Bild.

Was mache ich falsch?

Ich habe eine Suche durchgeführt, aber keine Antwort gefunden.

Ich verwende MT4 Version 4.00 Build 226.

 
Ich glaube, das liegt daran, dass es in der Geschichte nicht genug Zecken gibt. Deshalb ist sie nicht vorhanden. In Echtzeit sollte alles klar sein! ;)
 

Hallo, bitte teilen Sie mir mit, wo im Code eine Ungenauigkeit vorliegt, da ein solcher Fehler im Protokoll erscheint, wenn das Skript ausgeführt wird:

15:40:29 11dP_real_symbol EURUSD,H4: <--- 2 korrekte Charts gefunden. --->

15:40:29 11dP_real_symbol EURUSD,H4: <--- Um die Ergebnisse zu sehen, öffnen Sie den EURUSD,M1002 Chart --->

15:40:29 11dP_real_symbol EURUSD,H4: Symbolname für MarketInfo-Funktion muss ein String sein

15:40:29 11dP_real_symbol: leerer String-Parameter für FileWriteString-Funktion

15:40:29 11dP_real_symbol EURUSD,H4: Symbolname für MarketInfo-Funktion muss ein String sein

15:40:29 11dP_real_symbol EURUSD,H4: <--- Um Ergebnisse zu sehen, Charts öffnen,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: der erste Parameter für die Funktion WindowHandle muss ein initialisierter String sein

15:40:30 11dP_real_symbol EURUSD,H4: der erste Parameter für die WindowHandle-Funktion muss ein initialisierter String sein

15:40:31 11dP_real_symbol EURUSD,H4: der erste Parameter für die Funktion WindowHandle muss ein initialisierter String sein

Ich füge den Code selbst unten an:

Dateien:
11dp.mq4  15 kb
 
IgorM:

Wie lassen sich wichtige Daten/Variablen am besten speichern, wenn das Terminal sich aufhängt (Stromausfall)?

- globalen Variablen des Terminals? in eine Datei?

- Wie oft müssen sie gespeichert werden? (der letzte Aktienwert und einige bools des Beraters sind wichtig)


Im Gegensatz zu anderen Variablen kann eine GV-Variable nicht nur aus einem beliebigen Programm erstellt, sondern auch gelöscht werden. Der Wert der GV-Variable bleibt auf der Festplatte des Computers gespeichert, auch wenn das Client-Terminal geschlossen wird. Einmal deklarierte GV-Variable existiert im Client-Terminal für 4 Wochen seit dem letzten Aufruf. Wenn in diesem Zeitraum kein Programm auf die GV-Variable zugreift, wird die GV-Variable vom Client-Terminal gelöscht. Eine GV-Variable kann nur vom Typ double sein.
 
etroplus:

Hallo!

Ich kann nicht verstehen, warum ich eine offene Position nicht ändern kann, ich habe den Auftrag eingegeben (in der Auftragsauswahlfunktion)

//+------------------------------------------------------------------+
|| news trade.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#property link "http://www.metaquotes.net"


extern bool In_BUYSTOP=true;
extern intProfit_buy=100;
extern int StopLoss_buy=5;
extern double Lots_buy=0.01;
//+------------------------------------------------------------------+
extern bool In_SELLSTOP =true;
extern inttern TakeProfit_sell=100;
extern int StopLoss_sell =5;
extern double Lots_sell =0.01;
extern int LevelProfit = 25; // - Gewinnniveau in Punkten, das erreicht werden muss, um seinen Stopp auf das Breakeven-Niveau zu verlegen.
extern int LevelWLoss = 1; // - Breakeven-Level in Punkten, auf das die Stop-Position verschoben wird, nachdem ihr Gewinn das LevelProfit-Level in Punkten erreicht hat.

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----
int profitbuy=((Bid - OrderOpenPrice())/Point); // BUY ist überflüssig, zunächst sind alle Variablen gleich 0
int profitsell=((OrderOpenPrice()- Ask)/Point); // SELL
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
//----
{
int-Ticket;
wenn (Bid >iHigh(NULL,PERIOD_D1,1))
{
if(AufträgeSumme() < 1)
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots_sell,iHigh(NULL,PERIOD_D1,1),3,iHigh(NULL,PERIOD_D1,1)+StopLoss_sell*Point,iHigh(NULL,PERIOD_D1,1)-TakeProfit_sell*Point,Hour() == 21 && Minute() == 59)
}
wenn (Ask <iLow(NULL,PERIOD_D1,1))
{
if(AufträgeSumme() < 1)
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots_buy,iLow(NULL,PERIOD_D1,1),3,iLow(NULL,PERIOD_D1,1)-StopLoss_buy*Point,iLow(NULL,PERIOD_D1,1)+TakeProfit_buy*Point,Hour() == 21 && Minute() == 59)
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
zurück(0);
}
//+------------------------------------------------------------------+
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
int order_type=OrderType();
order_type=OP_SELL;//evtl.if(order_type==OP_SELL), dann werden weitere Klammern benötigt
int profitsell=((OrderOpenPrice()- Ask)/Point);
if (profitsell>5)//sowerden Sie versuchen, den Auftrag jeden Tick zu ändern?
ticket=OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderTakeProfit(),0,Blue);
zurück(0);
}
if(OrderSelect(0, SELECT_BY_POS,MODE_TRADES)==true)
{
order_type=OP_BUY;
int profitbuy=((Bid - OrderOpenPrice())/Point);
wenn (Gewinnkauf>5)
int stopmodify=OrderOpenPrice();
OrderModify(OrderTicket(),OrderOpenPrice(),stopmodify,OrderTakeProfit(),0,Blue);
zurück(0);
}
 
Hallo, bitte beraten Sie, wo im Code gibt es Ungenauigkeit, da, wenn das Skript funktioniert, gibt es einen solchen Fehler in das Protokoll:


15:40:29 11dP_real_symbol EURUSD,H4: <--- 2 korrekte Charts gefunden. --->

15:40:29 11dP_real_symbol EURUSD,H4: <--- Um die Ergebnisse zu sehen, öffnen Sie den Chart EURUSD,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: Symbolname für MarketInfo-Funktion muss ein String sein

15:40:29 11dP_real_symbol: leerer String-Parameter für FileWriteString-Funktion

15:40:29 11dP_real_symbol EURUSD,H4: Symbolname für MarketInfo-Funktion muss ein String sein

15:40:29 11dP_real_symbol EURUSD,H4: <--- Um Ergebnisse zu sehen, Charts öffnen,M1002 --->

15:40:29 11dP_real_symbol EURUSD,H4: der erste Parameter für die Funktion WindowHandle muss ein initialisierter String sein

15:40:30 11dP_real_symbol EURUSD,H4: der erste Parameter für die WindowHandle-Funktion muss ein initialisierter String sein

15:40:31 11dP_real_symbol EURUSD,H4: der erste Parameter für die Funktion WindowHandle muss ein initialisierter String sein

Ich füge den Code selbst unten an:
Dateien:
11dp_1.mq4  15 kb
 

Bitte erklären Sie mir, was die erwartete "OP BUY"-Variable bedeutet

here while(difference>Span)
( OrderSend (string symbol, OP_BUY, volume, double price, slippage,Bid-stoploss*Point,
Bid+takeprofit*Point, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=Red) )

while(0-different>Red)
( OrderSend (string symbol, OP_SELL, volume, double price, slippage,Ask+stoploss*Point,
Ask-takeprofit*Point, string comment=NULL, string comment=0, int magic=0, datetime expiration=0, color arrow_color=Black) )

 
Wie schreibe ich einen Punkt auf ein Diagramm in mql4? Ich muss den Preis und die Zeit so schreiben, dass er in jedem Zeitrahmen an Ort und Stelle bleibt