[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 591
for (int i=0; i<OrdersHistoryTotal(); i++)// Für alle Aufträge if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
dann nach magischer Zahl filtern
wenn (BestellMagischeZahl()==12)
Filter erfüllt 3 Positionen, aber ich brauche nur die letzte geschlossene Position
Sie können nicht herausfinden, wie Sie nur das letzte Exemplar übrig lassen können?
Danke
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает номер бара закрытия последней позиции или -1. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" или NULL - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//+----------------------------------------------------------------------------+int NumberOfBarCloseLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;int i, k=OrdersHistoryTotal();
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) t=OrderCloseTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True));
}
Was für Ihre Frage relevant ist, ist unterstrichen.
Guys, hier ist eine Frage, ein EA versucht, eine Bestellung zu öffnen, aber der Preis ändert sich und zeigt einen Fehler falschen Preis, wie kann ich es zu umgehen, so dass es versucht zu kaufen, bis es kauft?
void CLOSEORDER(string ord)
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY && ord=="Buy")
OrderClose(OrderTicket(),OrderLots(),Bid,30,CLR_NONE);// Закрываем Buyif (OrderType()==OP_SELL && ord=="Sell")
OrderClose(OrderTicket(),OrderLots(),Ask,30,CLR_NONE);// Закрываем Sell
}
}
}
//--------------------------------------------------------------------void OPENORDER(string ord)
{
int error;
if (ord=="Buy" ) error=OrderSend(Symbol(),OP_BUY, LOT,Ask,20,SL,TP,"", 1,3);
if (ord=="Sell") error=OrderSend(Symbol(),OP_SELL,LOT,Bid,20,SL,TP,"",-1,3);
if (error==-1) //неудачная покупка OK
{
ShowERROR(error,0,0);
}
Das war früher so.
Bid,3,CLR_NONE
Ich habe 30 hinzugefügt, weil ich ein 5er-Zeichen habe, aber es ist nutzlos.
Es gibt noch ein weiteres Ärgernis: Es gibt Abschnitte, in denen eine Position nur geschlossen und nicht umgekehrt wird, obwohl die Bedingungen für einen Stopp und die Eröffnung einer neuen Position die gleichen sind.
Diese Situationen können auftreten, weil sich die Kauf- und Verkaufsbedingungen im Expert Advisor nicht gegenseitig ausschließen. Versuchen Sie, die Werte der erforderlichen Variablen im Prüfgerät zu ermitteln, und zwar gemäß
if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка
{
Print("переменная=", значение);
}
Guys, hier ist eine Frage, ein EA versucht, eine Bestellung zu öffnen, aber der Preis ändert sich und zeigt einen Fehler falschen Preis, wie kann ich es zu umgehen, so dass es versucht zu kaufen, bis es kauft?
Das war früher so.
Ich habe 30 hinzugefügt, weil ich ein 5er-Zeichen habe, aber es ist nutzlos.
Führen Sie einen Befehl while(true) aus, prüfen Sie auf 135 Fehler und dann RefreshRates(). Schauen Sie, es gibt Skripte mit Beispielen in dem Paket mit dem Terminal, dort ist alles erklärt.
Dies muss im Detail untersucht werden. Solche Situationen können entstehen, weil sich die Eröffnungsbedingungen für Kauf und Verkauf im EA nicht gegenseitig ausschließen. Versuchen Sie, die Werte der erforderlichen Variablen im Tester nach folgendem Muster zu ermitteln
OK, in welchen Teil des Codes sollte dies eingefügt werden, wie praktisch angewendet?
SergNF: Was für Ihre Frage relevant ist, ist unterstrichen.
Ich wähle also die zuletzt geschlossene Reihenfolge aus und benötige die zuletzt mit dem Zauberer geschlossene, z.B. die Zeilen 3, 6 und 9, also brauche ich Zeile 3, da sie die zuletzt mit dem Zauberer geschlossene ist.
Helfen Sie mir, ein Problem zu lösen
Ich probiere alle geschlossenen Posten aus
for (int i=0; i<OrdersHistoryTotal(); i++)// Für alle Aufträge
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
dann nach magischer Zahl filtern
wenn (BestellMagischeZahl()==12)
Filter erfüllt 3 Positionen, aber ich brauche nur die letzte geschlossene Position
Sie können nicht herausfinden, wie Sie nur das letzte Exemplar übrig lassen können?
Danke
Auch das ist dringend notwendig.
Helfen Sie mir, das Problem zu lösen.
Ich wähle nach allen geschlossenen Positionen aus
for (int i=0; i<OrdersHistoryTotal(); i++)// auf alle Bestellungen des Terminals
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
anschließend Filter nach magischer Zahl
wenn (BestellMagischeZahl()==12)
der Filter entspricht 3 Positionen, aber ich brauche nur die letzte geschlossene Position
Sie können nicht herausfinden, wie Sie nur das letzte Exemplar übrig lassen können?
Danke
Bitte um Hilfe! Ich möchte, dass der Auftrag sofort nach dem Schließen des alten Auftrags zum Tp- oder SL-Preis eröffnet wird.
#property copyright "Copyright © 2010, MetaQuotes Software Corp.
#property link "http://www.metaquotes.net"
#property show_confirm
extern int MaxRisk=3;
extern bool Buy=false; //zur Eröffnung eines Kaufauftrags
extern bool Sell=true; //um einen Verkaufsauftrag zu eröffnen.
extern inttern MagicNumber=7749;
extern TP=210;
extern inttern SL=420;
{
double point=MarketInfo(Symbol(),MODE_POINT);//Abfrage Point
double Free=AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Step =MarketInfo(Symbol(),MODE_LOTSTEP);
double Lot =MathFloor(Free*MaxRisk/100/One_Lot/Step)*Step;
int pos,total=OrdersTotal();
//----
if(Buy==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask-SL*Point,Ask+TP*Point, "777"+ Symbol(), MagicNumber, 0, DarkGreen);
Kaufen=false;
}
if(Verkauf==true && OrdersTotal()<=1)
{
OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+SL*Point,Bid-TP*Point, "4949"+ Symbol(), MagicNumber, 0, DarkGreen);
Verkaufen=false;
}
for (pos=0; pos<Gesamt; pos++)
if(OrderSelect(pos,SELECT_BY_POS )==true)
if(BestellungenSumme()==OP_BUY)
if(PRICE_CLOSE==OrderTakeProfit()) Buy=true;
if(PRICE_CLOSE==OrderStopLoss()) Verkaufen=true;
}
}
if(OrderSelect(pos,SELECT_BY_POS )==true)
wenn (Auftragssumme()==OP_SELL)
{
if(PRICE_CLOSE==OrderStopLoss()) Buy=true;
if(PRICE_CLOSE==OrderTakeProfit()) Verkaufen=true;
}
} }
//----
zurück(0);
}
//+------------------------------------------------------------------+
Guys, hier ist eine Frage, ein EA versucht, eine Bestellung zu öffnen, aber der Preis ändert sich und zeigt einen Fehler falschen Preis, wie kann ich es zu umgehen, so dass es versucht zu kaufen, bis es kauft?
Das war früher so.
Ich habe 30 hinzugefügt, weil ich ein 5er-Zeichen habe, aber es ist nutzlos.
Auch das ist dringend notwendig.
Helfen Sie mir, das Problem zu lösen.
Ich probiere alle geschlossenen Posten aus.
Fangen Sie am Ende an, dann ist der erste, der passt, derjenige.
for (int i=OrdersHistoryTotal()-1;i>=0; i--)//
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)==true)
Es gibt noch ein weiteres Ärgernis: Es gibt Abschnitte, in denen eine Position nur geschlossen und nicht umgekehrt wird, obwohl die Bedingungen für einen Stopp und die Eröffnung einer neuen Position die gleichen sind.
Diese Situationen können auftreten, weil sich die Kauf- und Verkaufsbedingungen im Expert Advisor nicht gegenseitig ausschließen. Versuchen Sie, die Werte der erforderlichen Variablen im Prüfgerät zu ermitteln, und zwar gemäß
if(Time[0]=='время_нужного_бара') //чтоб не засорять логи берем на конкретном баре - посмотрите на картинке, где именно ошибка { Print("переменная=", значение); }Guys, hier ist eine Frage, ein EA versucht, eine Bestellung zu öffnen, aber der Preis ändert sich und zeigt einen Fehler falschen Preis, wie kann ich es zu umgehen, so dass es versucht zu kaufen, bis es kauft?
Das war früher so.
Ich habe 30 hinzugefügt, weil ich ein 5er-Zeichen habe, aber es ist nutzlos.
Dies muss im Detail untersucht werden. Solche Situationen können entstehen, weil sich die Eröffnungsbedingungen für Kauf und Verkauf im EA nicht gegenseitig ausschließen. Versuchen Sie, die Werte der erforderlichen Variablen im Tester nach folgendem Muster zu ermitteln
Was für Ihre Frage relevant ist, ist unterstrichen.