Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 451

 
//+------------------------------------------------------------------+
//| Löschen und/oder Schließen eines Auftrags, gefiltert nach Volumen |
//---------------------------------------------------------------------
#property show_inputs
//--------------------------------------------------------------------
extern double MinLot = 0.01; //kleinste zu löschende/schließende Partie
extern double MaxLot = 0.1; //maximale Partie, die gelöscht/umgangen wird
extern bool Buy = false; //Löschen/Schließen der Richtung von Kaufaufträgen
extern bool Sell = false; //Löschen/Schließen der Richtung von Verkaufsaufträgen
extern bool pending = true; //Löschen schwebender Aufträge
extern bool market = true; //Schließen von Marktpositionen
extern int slippage = 2; //slippage des Preises bei Schließung der Marktpositionen
//--------------------------------------------------------------------
int start()
{
doppelt SL,TP;
string txt=StringConcatenate("Script Auftrag entfernen oder schließen, Start ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
RefreshRates();

bool error=true;
int Fehler,OT,Ticket,nn;
doppelt OOP,OL;
while(true)
{
for (int j = OrdersTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS))
{
wenn ((OrderSymbol() == Symbol())
{
OL = OrderLots();
wenn (OL<MinLot || OL>MaxLot) weiter;
OT = OrderType();
wenn (!Markt && OT<2) weiter;
if (!pending && OT>1) continue;
Ticket = OrderTicket();
OOP = OrderOpenPrice();
wenn (OT==OP_BUY)
{
error=OrderClose(Ticket,OrderLots(),NormalizeDouble(Bid,Digits),Slippage,Red);
if (error) txt = StringConcatenate(txt,"\nClosed BUY Order",Ticket);
else txt = StringConcatenate(txt,"\nSchließfehler ",GetLastError());
}
wenn (OT==OP_SELL)
{
error=OrderClose(Ticket,OrderLots(),NormalizeDouble(Ask,Digits),Slippage,Blue);
if (error) txt = StringConcatenate(txt, "SELL order closed",Ticket;)
else txt = StringConcatenate(txt,"\nFehler ",GetLastError()," close ",Ticket);
}
wenn (OT>1)
{
error=OrderDelete(Ticket);
if (Fehler) txt = StringConcatenate(txt,"\nOrderDeleted ",StrOrdersType(OT)," ",Ticket);
else txt = StringConcatenate(txt,"\nFehler ",GetLastError()," Entfernen ",StrOrdersType(OT)," ",Ticket);
}
wenn (!Fehler)
{
Fehler = GetLastError();
wenn (Fehler<2) weiter;
wenn (Fehler==129)
{ Comment("Falscher Preis ",TimeToStr(TimeCurrent(),TIME_SECONDS));
Schlaf(5000);
RefreshRates();
weiter;
}
wenn (Fehler==146)
{
j++;
if (IsTradeContextBusy()) Schlaf(2000);
weiter;
}
Comment("Fehler ",Fehler," Schließen der Bestellung N ",OrderTicket(),
",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
}
}
}
int n=0;
for (j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol())
{
OL = OrderLots();
wenn (OL<MinLot || OL>MaxLot) weiter;
OT = OrderType();
wenn (!Markt && OT<2) weiter;
if (!pending && OT>1) continue;
n++;
}
}
}
wenn (n==0) break;
nn++;
if (nn>10) {Kommentar("Es konnten nicht alle Geschäfte geschlossen werden, es gibt noch ",n);break;}
Sleep(1000);
RefreshRates();
}
Comment(txt,"\nScript hat seine Arbeit beendet ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
zurück(0);
}
//--------------------------------------------------------------------
string StrOrdersType(int t)
{
if (t==OP_BUY) return("Kaufen");
if (t==OP_SELL) return("Verkaufen");
if (t==OP_BUYLIMIT) return("BuyLimit");
if (t==OP_SELLLIMIT) return("SellLimit");
if (t==OP_BUYSTOP) return("BuyStop");
if (t==OP_SELLSTOP) return("SellStop");
}

//--------------------------------------------------------------------

Was sollte ich im Skript hinzufügen oder ändern, um alle offenen Aufträge für alle Paare nach Lotgröße zu schließen?

 
Vitek, verwenden Sie die SRC-Taste, um den Code einzufügen! Wer muss sich schon durch unlesbares Gekritzel wühlen?!
 
pu6ka:
Ja, Ask Preise sind nicht sichtbar, aber sie sind :)
Im Visualizer können Sie auf Pause drücken und in den Diagrammeigenschaften die Option "Fragelinie anzeigen" auswählen, um den Test fortzusetzen. Das Preisdiagramm in MT4 wird normalerweise nach Bid gezeichnet.

Wovon hängt die Qualität der Prüfungen ab und wie kann sie maximal gesteigert werden?
 
Zver4991:

und wovon hängt die Qualität der Prüfungen ab und wie kann sie maximal verbessert werden?
Ich weiß es ehrlich gesagt nicht. Ich habe es noch nicht gebraucht, schauen Sie auf der Website nach
 

Liebe Fachleute.
Könnten Sie mir bitte sagen, wie ich eine Tabelle mit ausstehenden Aufträgen öffnen kann, ohne Zyklen zu verwenden?
Wenn es nicht schwierig ist, zeigen Sie bitte zumindest ein grobes Beispiel für einen solchen Code,
mit der Möglichkeit, Schritt und Losgröße jeder aufeinanderfolgenden Reihenfolge des Rasters zu ändern.

 
Forexman77:
Ich habe Zeilen

anstelle vonint Ticket; es treten Fehler auf:

'=' - linke eckige Klammer, erwartet für Array('=' - linke eckige Klammer, erwartet für Array)

'>' - linke eckige Klammer erwartet für Array ('=' - linke eckige Klammer erwartet für Array)

'>' - unerwartetes Token('>' - Unerwartetes Token)

')' - Zuweisung erwartet('' - Zuweisung erwartet )

'continue' - 'break' oder 'continue' wird nur innerhalb einiger Schleifen verwendet )

und vieles mehr.


Ticket wird also noch irgendwo in der alten Version verwendet. Wir müssen den Code bereinigen...
 
1mql:

Liebe Fachleute.
Könnten Sie mir bitte sagen, wie ich eine Tabelle mit ausstehenden Aufträgen öffnen kann, ohne Schleifen zu verwenden?
Wenn es nicht schwierig ist, zeigen Sie bitte zumindest ein grobes Beispiel für einen solchen Code,
Sie können Schritt und Losgröße jedes nachfolgenden Auftrags im Raster ändern.

Ja, eigentlich ist es dasselbe wie in einer Schleife... ...aber ohne die Schleife. Zeigen Sie uns, wie Sie eine Schleife öffnen, und erklären Sie, warum Sie keine Schleifen verwenden wollen, denn es ist unklar, was Sie erreichen wollen.
 
borilunad:
Vitek, benutzen Sie die SRC-Taste, um den Code einzufügen! Wer muss sich schon durch unleserliches Gekritzel wühlen!

//+------------------------------------------------------------------+
//| удаления и/или закрытие ордера, с фильтрацией его по объему |
//---------------------------------------------------------------------
#property show_inputs
//--------------------------------------------------------------------
extern double MinLot = 0.01; //минимальный лот который удаляем/закываем
extern double MaxLot = 0.1; //максимальный лот который удаляем/закываем
extern bool Buy = false; //удалять/закрывать направление buy ордеров
extern bool Sell = false; //удалять/закрывать направление sell ордеров
extern bool pending = true; //удалить отложенные ордера
extern bool market = true ; //закрыть рыночные позиции
extern int slippage = 2; //проскальзывание цены при закрытии рыночных позиций
//--------------------------------------------------------------------
int start()
{
double SL,TP;
string txt=StringConcatenate("Скрипт удаления или закрытие ордера, старт ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
RefreshRates();

bool error=true;
int Error,OT,Ticket,nn;
double OOP,OL;
while(true)
{
for (int j = OrdersTotal()-1; j >= 0; j--)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if ((OrderSymbol() == Symbol()))
{
OL = OrderLots();
if (OL<MinLot || OL>MaxLot) continue;
OT = OrderType();
if (!market && OT<2) continue;
if (!pending && OT>1) continue;
Ticket = OrderTicket();
OOP = OrderOpenPrice();
if (OT==OP_BUY)
{
error=OrderClose(Ticket,OrderLots(),NormalizeDouble(Bid,Digits),slippage,Red);
if (error) txt = StringConcatenate(txt,"\nЗакрыт ордер BUY ",Ticket);
else txt = StringConcatenate(txt,"\nОшибка закрытия ",GetLastError());
}
if (OT==OP_SELL)
{
error=OrderClose(Ticket,OrderLots(),NormalizeDouble(Ask,Digits),slippage,Blue);
if (error) txt = StringConcatenate(txt,"\nЗакрыт ордер SELL ",Ticket);
else txt = StringConcatenate(txt,"\nОшибка ",GetLastError()," закрытия ",Ticket);
}
if (OT>1)
{
error=OrderDelete(Ticket);
if (error) txt = StringConcatenate(txt,"\nУдален ордер ",StrOrdersType(OT)," ",Ticket);
else txt = StringConcatenate(txt,"\nОшибка ",GetLastError()," удаления ",StrOrdersType(OT)," ",Ticket);
}
if (!error)
{
Error = GetLastError();
if (Error<2) continue;
if (Error==129)
{ Comment("Неправильная цена ",TimeToStr(TimeCurrent(),TIME_SECONDS));
Sleep(5000);
RefreshRates();
continue;
}
if (Error==146)
{
j++;
if (IsTradeContextBusy()) Sleep(2000);
continue;
}
Comment("Ошибка ",Error," закрытия ордера N ",OrderTicket(),
" ",TimeToStr(TimeCurrent(),TIME_SECONDS));
}
}
}
}
int n=0;
for (j = 0; j < OrdersTotal(); j++)
{
if (OrderSelect(j, SELECT_BY_POS))
{
if (OrderSymbol() == Symbol())
{
OL = OrderLots();
if (OL<MinLot || OL>MaxLot) continue;
OT = OrderType();
if (!market && OT<2) continue;
if (!pending && OT>1) continue;
n++;
}
}
}
if (n==0) break;
nn++;
if (nn>10) {Comment("Не удалось закрыть все сделки, осталось еще ",n);break;}
Sleep(1000);
RefreshRates();
}
Comment(txt,"\nСкрипт закончил свою работу ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
return(0);
}
//--------------------------------------------------------------------
string StrOrdersType(int t)
{
if (t==OP_BUY) return("Buy");
if (t==OP_SELL) return("Sell");
if (t==OP_BUYLIMIT) return("BuyLimit");
if (t==OP_SELLLIMIT) return("SellLimit");
if (t==OP_BUYSTOP) return("BuyStop");
if (t==OP_SELLSTOP) return("SellStop");
}
//--------------------------------------------------------------------

Was sollte ich hinzufügen oder ändern, um alle offenen Aufträge für alle Paare nach Losgröße zu schließen?

 
Vitek2010:

Was sollte ich hinzufügen oder ändern, um alle offenen Aufträge für alle Paare nach Losgröße zu schließen?

Unterhalb des letzten Externen:
extern int slippage = 2; // Kursabweichung beim Schließen von Marktpositionen

eine weitere einfügen:
extern bool total_symb = true; //für alle Paare

und in jeder Zeile:
wenn ((OrderSymbol() == Symbol())
и
if(OrderSymbol() == Symbol())

durch diese ersetzen:
if(OrderSymbol() == Symbol() || total_symb)

Theoretisch sollte es funktionieren, überprüfen Sie es.

 
Es stellt sich die Frage, ob es möglich ist , einen Expert Advisor oder ein Skript zu schreiben, das z.B. bei einem Verlust von 2% am Tag alle Transaktionen schließen würde?
Grund der Beschwerde: