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

 
Bitte schauen Sie sich meinen vorherigen Beitrag (auf Seite 67) an. Ich kann den Fehler nicht finden - ausstehende Aufträge werden nicht gesetzt.
 
nemo811:
Bitte schauen Sie sich meinen vorherigen Beitrag (auf Seite 67) an. Ich kann den Fehler nicht finden - ausstehende Aufträge werden nicht gesetzt.

Das ist kein Irrtum. Sie sollten vorsichtiger sein.

#property copyright "Copyright © 2010, Хлыстов Владимир"
#property link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; //уровень выставления SL, если 0, то SL не выставляется
extern int takeprofit = 0; //уровень выставления TP, если 0, то TP не выставляется
extern int Magic = 123456; //уникальный номер ордера
extern bool BUY = false; //открыть ордер BUY
extern bool SELL = false; //открыть ордер SELL
extern bool BUYSTOP = false; //открыть ордер BUYSTOP
extern bool SELLSTOP = false; //открыть ордер SELLSTOP
extern double Lot = 0.1; //объем ордера
extern int slippage = 3; //Максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
if (BUY)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
OPENORDER ("Buy");
}
if (SELL)
{ 
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; 
OPENORDER ("Sell");
}
if (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0; 
OPENORDER ("Buy Stop");
}
if (SELLSTOP)
{ 
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); else SL=0; 
OPENORDER ("Sell Stop");
}
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
while (true)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),slippage,SL,TP,"BUY",Magic,0,Blue);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),slippage,SL,TP,"SELL",Magic,0,Red);
if (ord=="BuyStop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask,Digits),SL,TP,"BUYSTOP",Magic,0,Blue);
if (ord=="SellStop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid,Digits),SL,TP,"SELLSTOP",Magic,0,Red);
if (error==-1) //неудачная покупка OK
{ 
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
return;
} 
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{ 
case 1: return;
case 2: Alert("Нет связи с торговым сервером ",Symbol());return;
case 3: Alert("Error неправильные параметры ",Symbol());return;
case 130: Alert("Error близкие стопы Ticket ",Symbol());return;
case 134: Alert("Недостаточно денег ",Symbol());return;
case 146: Alert("Error Подсистема торговли занята ",Symbol());return;
case 129: Alert("Error Неправильная цена ",Symbol());return;
case 131: Alert("Error Неправильный объем ",Symbol());return;
case 4200:Alert("Error Объект уже существует ",Symbol());return;
default: Alert("Error ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------
 
gince:

Das ist kein Irrtum. Sie müssen vorsichtiger sein


Nein, nein, nein, nein. Sie schauen auf den falschen Beitrag. Es gibt noch eine weitere, gleich unten :)). In der von Ihnen angekreuzten Version ist nicht angegeben, auf welcher Höhe des aktuellen Kurses (nur des aktuellen Kurses) das Pendel angesetzt werden soll. Wir danken Ihnen für Ihr Feedback.
 
nemo811:

Nein, nein, nein. Sie haben sich einen falschen Beitrag angesehen. Es gibt noch eine weitere, gleich unten :)). Die von Ihnen geprüfte Version zeigt nicht das Niveau des aktuellen Preises an (sie zeigt nur den aktuellen Preis an), bei dem der Pendelwert angesetzt werden sollte. Wir danken Ihnen für Ihr Feedback.

Etwas mit dem Aufruf der Funktion OPENORDER() oder der Funktion selbst.

Das funktioniert folgendermaßen

wenn (BUYSTOP)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); sonst TP=0;

if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); sonst SL=0;

int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),Slippage,SL,TP,"",Magic,0);

}

 
gince:

Etwas mit dem Aufruf der Funktion OPENORDER() oder der Funktion selbst.

Das funktioniert folgendermaßen

wenn (BUYSTOP)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); sonst TP=0;

if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); sonst SL=0;

int error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),Slippage,SL,TP,"",Magic,0);

}


Aaaaaaaaaaaaah!!! Computergötter!!! Ich habe es schon zehnmal durchgespielt! Warum funktioniert es nicht?! Das Wichtigste ist, dass sich der Markt öffnet. Die anhängigen Verfahren werden nach genau demselben Prinzip durchgeführt. Was fehlt noch? :)))))))
 

Bitte beraten Sie, wie man TrailingStopFrCnSAR_v2 in Expert Advisor einfügen, die im Tutorial beschrieben ist?

Wie kann ich die Auftragsverfolgung deaktivieren, so dass sie funktioniert, wenn ein anderer EA einen schwebenden Auftrag erteilt oder einen Auftrag eröffnet?

 

Urrrrrrra!!!!!!!! Ich habe den Fehler gefunden!

Falls es jemanden interessiert, hier ist eine funktionierende Version:

#property copyright "Copyright © 2010, Khlystov Vladimir"
#p

roperty link "cmillion@narod.ru"
#property show_inputs
//--------------------------------------------------------------------
extern int stoploss = 0; //level of SL exposition, if 0, SL is not exposed
extern int int takeprofit = 0; //t TP level, wenn 0, wird TP nicht ausgestellt
extern int int Magic = 123456; //Nummer einer Bestellung
extern bool BUY = false; //Kaufauftrag eröffnen
extern bool SELL = false; //Verkaufsauftrag eröffnen
extern bool BUYSTOP = false; //Eröffnen der BUYSTOP-Order
extern bool SELLSTOP = false; //SELLSTOP-Auftrag eröffnen
extern double Lot = 0.1; // Auftragsvolumen
extern int slippage = 3; //maximal zulässige Preisabweichung für Market Orders
extern int DistanceSet = 20; //Marktentfernung
//--------------------------------------------------------------------
doppelt SL,TP;
//--------------------------------------------------------------------
int start()
{
wenn (KAUFEN)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); sonst TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); sonst SL=0;
OPENORDER ("Kaufen");
}
wenn (SELL)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); sonst TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); sonst SL=0;
OPENORDER ("Verkaufen");
}
wenn (BUYSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); sonst TP=0;
if (stoploss!=0) SL = NormalizeDouble(Ask - stoploss*Point,Digits); sonst SL=0;
OPENORDER ("Buy Stop");
}
wenn (SELLSTOP)
{
if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); sonst TP=0;
if (stoploss!=0) SL = NormalizeDouble(Bid + stoploss*Point,Digits); sonst SL=0;
OPENORDER ("Verkaufsstopp");
}
zurück(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
int error,err;
while (true)
{ error=true;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),Slippage,SL,TP,"",Magic,0);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,SL,TP,",Magic,0);
if (ord=="Buy Stop" ) error=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),slippage,SL,TP,"",Magic,0);
if (ord=="Sell Stop") error=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),Slippage,SL,TP,",Magic,0);
if (Fehler==-1) //Fehlschlag
{
ShowERROR();
err++;Sleep(2000);RefreshRates();
}
if (error || err >10) return;
}
Rückkehr;
}
//--------------------------------------------------------------------
void ShowERROR()
{
int err=GetLastError();
switch ( err )
{
Fall 1: Rückkehr;
Fall 2: Alert("Keine Verbindung zum Handelsserver ",Symbol());return;
Fall 3: Alert("Fehler falsche Parameter ",Symbol());return;
Fall 130: Alert("Fehler beim Schließen von Ticketstops ",Symbol());return;
Fall 134: Alert("Nicht genug Geld ",Symbol());return;
Fall 146: Alert("Error Trade Subsystem is busy ",Symbol());return;
Fall 129: Alert("Fehler Falscher Preis ",Symbol());return;
Fall 131: Alert("Fehler Falsches Volumen ",Symbol());return;
case 4200:Alert("Fehler Objekt existiert bereits ",Symbol());return;
default: Alert("Fehler ",err," ",Symbol());return;
}
}
//--------------------------------------------------------------------

Vielen Dank an alle, die sich an der Diskussion beteiligt haben!!! Nirgendwo ohne dich! :)))))

 
nemo811:

Urrrrrrra!!!!!!!! Ich habe den Fehler gefunden!


Herzlichen Dank an alle, die sich an der Diskussion beteiligt haben!!! Nirgendwo ohne dich! :)))))

haben Sie immer noch einen Fehler in Ihrem Code.

Denken Sie daran: Stopps und Takes in schwebenden Aufträgen werden nicht vom aktuellen Kurs, sondern vom Eröffnungskurs des Auftrags aus gerechnet.

 

HILFE! Bitte sagen Sie mir, wenn ich einen Teil einer Position schließe (z.B. einen Auftrag für 1 Lot, und 0,5 Lots schließe) sollte sich das OrderClose Ticket ändern? Mein Tester sagt, dass es das tut... Wie kann man sie vermeiden? Nachfolgend finden Sie einen Teil des Abschlusscodes...

1 2011.01.31 06:57 sell 1 2.55 1.36177 0.00000 0.00000 0.00 10000.00
2 2011.01.31 08:10 close 1 0.51 1.36039 0.00000 0.00000 70.38 10070.38
3 2011.01.31 08:10 sell 2 2.04 1.36177 0.00000 0.00000 0.0000 10070.38
4 2011.01.31 08:10 close 2 0.40 1.36038 0.00000 0.00000 55.60 10125.98
5 2011.01.31 08:10 sell 3 1.64 1.36177 0.00000 0.00000 0.0000 10125.98

Eine weitere Frage: Ich möchte meinen Auftrag in 4 Teile aufteilen und jeden von ihnen schließen, wenn Cls_S==true ausgelöst wird. Ich habe versucht, den Zähler zu benutzen... Funktioniert nicht...

Kann mir jemand eine Idee geben?

Vielen Dank im Voraus!!!!

if (Tip==1 && ((Cls_S0==wahr&&TotClS==0)||(Cls_S1==wahr&&TotClS==1)
||(Cls_S2==wahr&&TotClS==2)||(Cls_S3==wahr&TotClS==3)) // Ein Verkaufsauftrag ist offen.
{ // und es gibt ein Kriterium, um es zu schließen
Alert("Attempting to close 0.2 Lot Sell ",Ticket,". Waiting for reply...");
RefreshRates(); // Daten aktualisieren
Ans=OrderClose(Ticket,LotCt,Ask,5);

if (Ans==true) // Es hat funktioniert :)
{
TotClS++;
Alert ("Closed 0.2 Lot Sell ",Ticket);
break; // Exit from closed loop
}
if (Fun_Error(GetLastError())==1) // Fehlerbehandlung
continue; // Retry
return; // Exit from start()
}
break; // Exit while

 
gince:
Ich habe eine temporäre Zeichnung von flag[] buffer - es ist leer, aber warum? Wo liegt mein Fehler?
Ich weiß es nicht. Sergejew weiß es, er sagte, es scheint richtig zu sein. Ich würde auch gerne sehen, wie man es richtig schreibt.
Ich habe es nur ein wenig korrigiert, damit es etwas aussagt.
- Ich habe den Indikator in ein separates Fenster gestellt, dann kann man ihn wieder zurückstellen

- Array macd[] hing in der Luft, machte es zu einem Indikator, erhöhte die Genauigkeit
- fixiert Ihre komplexe Bedingung zu öffnen, setzen Sie eine einfache für die Anpassung
- die Bedingung für das Kennzeichen geändert, so dass es zumindest funktioniert.

Dann können Sie nach und nach Bedingungen einführen, Sie werden sofort sehen, wo der Fehler liegt.

Dateien:
Grund der Beschwerde: