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

 
FoxUA:

Ja, ein Teil des Codes funktioniert und ein Teil des Codes sagt 4107 und 130 Fehler und das Interessanteste ist, dass sie den Preis von ein und derselben Funktion nehmen und auf ein und dieselbe Öffnungsfunktion wirken.


Versuchen Sie irgendwo die folgende Struktur, dieses Beispiel ist für meinen Fall.

if (OrderSend(Symbol(),OP_BUYSTOP,Lot,OpenPrice,0,Ask,0,0,Mg,0,Red)== -1)
Print("Fehler 1 OP_BUYSTOP "," Open=",OpenPrice," StopLoss=",Ask," Trall=",TrallBuy," StopLoss=",StopLoss) ;

siehe das Ergebnis im Protokoll unter

 

Guten Tag, liebe Genießer. Helfen Sie mir, diesen Code zu verstehen...

//+------------------------------------------------------------------+
Offene Positionen berechnen //|
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICEA)
{
if(OrderType()==OP_BUY) kauft++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- Rücksendeauftragsvolumen
if(Käufe>0) return(Käufe);
sonst return(-sells);
}

//+------------------------------------------------------------------+
//| Berechnung der optimalen Losgröße |
//+------------------------------------------------------------------+
double LotSize(){
DoppellotMM;
if(PairsTraded==0){
lotMM = MathCeil(AccountFreeMargin() * Risiko / 10000) / 10;
} sonst {
lotMM = MathCeil(AccountFreeMargin() * Risk / 10000 /PairsTraded) / 10 ;
}
wenn (MM==true){
if (lotMM < 0.1) lotMM = Lots;
wenn (lotMM > 1,0) lotMM = MathCeil(lotMM);
wenn (lotMM > 100) lotMM = MaxLots;
}
sonst lotMM = Lose;
zurück (lotMM);
}

//+------------------------------------------------------------------+
//| Prüfung auf offene Auftragsbedingungen |
//+------------------------------------------------------------------+
void CheckForOpen()
{
doppelt CCI5,CCI15,CCI30,CCIH1,CCIH4;
int senden;

//----MultitimeFrame CCI-Einstellung


CCI5 = iCCI(NULL,PERIOD_M5,50,PRICE_CLOSE,0);
CCI15 = iCCI(NULL,PERIOD_M15,50,PRICE_CLOSE,0);
CCI30 = iCCI(NULL,PERIOD_M30,50,PRICE_CLOSE,0);
CCIH1 = iCCI(NULL,PERIOD_H1,50,PRICE_CLOSE,0);


//----


//---- Verkaufsbedingungen
wenn ((CCIH1<0)&&(CCI30<0)&&(CCI15<0)&&(CCI5<0))//op verkaufen
{
send=OrderSend(Symbol(),OP_SELL,LotSize(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,MagicName+"-Sell",MAGICEA,0,Red);
Rückkehr;
}

//---- Kaufbedingungen
wenn ((CCIH1>0)&&(CCI30>0)&&(CCI15>0)&&(CCI5>0))//op kaufen
{
send=OrderSend(Symbol(),OP_BUY,LotSize(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,MagicName+"-Buy",MAGICEA,0,Blue);
Rückkehr;
}
}

//----

//+------------------------------------------------------------------+
//| Prüfung auf enge Auftragsbedingungen |
//+------------------------------------------------------------------+
void CheckForClose()
{
//----


//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICEA || OrderSymbol()!=Symbol()) weiter;

//---- Auftragsart prüfen
if (OrderSymbol()==Symbol() && OrderType()==OP_BUY && Bid-TrailingStop*Point > OrderStopLoss()){

if (Bid > OrderOpenPrice()+TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,0,0,White);
}
} sonst {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-1*Point,0,0,White);
}
if (OrderSymbol()==Symbol() && OrderType()==OP_SELL && Ask-TrailingStop*Point < OrderStopLoss()){

if (Ask < OrderOpenPrice()-TrailingStop*Point) {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,0,0,White);
}
} sonst {
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+1*Point,0,0,White);
}
}

//----
}
//+------------------------------------------------------------------+
//| Startfunktion |
//+------------------------------------------------------------------+
void start()
{
//---- check für Geschichte und Handel
if(Bars<100 || IsTradeAllowed()==false) return;

//---- berechnet offene Aufträge nach aktuellem Symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
sonst CheckForClose();

//----
}
//+------------------------------------------------------------------+

Wenn ich möchte, dass nur eine Position geöffnet wird und ich nicht möchte, dass sie wieder geöffnet wird, nachdem ich sie geschlossen habe, aber sie öffnet eine Position, nachdem ich sie geschlossen habe, möchte ich, dass sie wieder geöffnet wird.

 
mydone:

Guten Tag, liebe Genießer. Helfen Sie mir, diesen Code zu verstehen...

... code ...

Ich brauche es, um nur eine Transaktion unter gebildet Bedingung und nach seiner Schließung zu öffnen, bis die nächste Bedingung nicht mehr öffnen... aber was ich habe, ist, dass es öffnet, schließe ich zum Beispiel einen bestimmten Handel und es öffnet wieder an der gleichen Stelle, was für?

Sie haben es und es wird sich öffnen, solange die Öffnungsbedingung besteht.

Prüfen Sie, ob die Position bereits durch dieses Signal geöffnet wurde, z. B. bool OpnPose = false; bevor eine Position durch dieses Signal geöffnet wird, prüfen Sie das Flag, und wenn es nicht gesetzt ist (OpnPose == false), öffnen Sie die Position. Wenn es geöffnet wird, wenn es wirklich geöffnet wurde und auf dem Markt ist, setzen Sie die Flagge zum Öffnen durch dieses Signal: OpnPose = true; sobald ein neues Signal kommt, verwerfen Sie dieses:
OpnPose = false;

 
Ja, wir können es einfacher machen, nachdem das Signal ausgelöst wird, setzen Sie einen Zähler, so dass nichts anderes innerhalb von 2 oder 3 Kerzen öffnet, so dass, wenn es manuell schließt nichts anderes öffnet, und der Zähler hebt das Öffnungsverbot nach ein paar Kerzen
 

Dankeschön

 
Techno:
Ja, wir können es einfacher machen, nachdem das Signal ausgelöst wird, setzen Sie einen Zähler, so dass nichts anderes innerhalb von 2 oder 3 Kerzen öffnet, so dass, wenn es manuell schließt nichts anderes öffnet, und der Zähler hebt das Öffnungsverbot nach ein paar Kerzen
Und nachdem das Verbot aufgehoben wurde, wird der EA wieder einen Auftrag auf dem Markt platzieren... Was ist, wenn der EA beschließt, die Position nach 10, 15 oder 20 Candlesticks zu schließen und nicht wieder zu öffnen, auch wenn das Signal noch vorhanden ist? Am Freitag, zum Beispiel...
 
artmedia70:
Und nachdem das Verbot aufgehoben wurde, wird der EA den Auftrag wieder auf den Markt bringen... Und wenn er beschließt, die Position nach 10, 15, 20 Kerzen zu schließen und nicht wieder zu öffnen, auch wenn das Signal noch vorhanden ist? Am Freitag, zum Beispiel...
Schon nach einer Kerze wird es ein völlig anderes Signal geben, das berücksichtigt werden muss. Es genügt, 3 Candlesticks abzuwarten, bis das erste Signal verschwindet. Übrigens verwenden Sie einen Indikator mit einer Zeitspanne von 5, 15, 30 und 60 Minuten, so dass 3 30- oder 15-Minuten-Candlesticks ausreichen.
 

meine Frage ist, wie zu tun, wenn es eine neue Bestellung aus dem Beispiel der genau das Gegenteil, wenn es eine geschlossene Bestellung "if(TotalHistoryOrders<OrdersHistoryTotal())// eine andere Bestellung hat in der Geschichte erschienen" und ich brauche die offene auch bestimmt werden

 
FoxUA:

meine Frage ist, wie zu tun, wenn es eine neue Bestellung aus dem Beispiel der genau das Gegenteil, wenn es eine geschlossene Bestellung "if(TotalHistoryOrders<OrdersHistoryTotal())// eine andere Bestellung hat in der Geschichte erschienen" und ich brauche die offene auch bestimmt werden

Wenn Sie alle Aufträge durchgehen und überflüssige aussortieren, zählen Sie die Zahl und speichern Sie sie. Wenn sich die Zahl bei einer neuen Schleife ändert, bedeutet das, dass entweder ein neuer Auftrag eröffnet wurde oder verschwunden ist...
 
Techno:
Zählen Sie beim Durchprobieren aller Aufträge und beim Aussortieren überflüssiger Aufträge die Zahl, merken Sie sie sich, und wenn sich die Zahl bei einer neuen Schleife geändert hat, bedeutet dies, dass entweder ein neuer Auftrag erschienen ist oder verschwunden ist.


Ich brauche nur die Funktion aufzurufen und das war's, ich brauche nur eine Zeile "Wenn die Bestellungen mehr als eine sind als .... Das ist alles" und Sie bieten mir eine ganze Funktion an

So speichere ich Daten über Bestellungen

int total_order;            // переменная в которой хранится общее количество открытых ордеров в терминале
int my_total_order;         // переменная в которой хранится общее количество открытых ордеров с нашим Magic
Grund der Beschwerde: