[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

 
vik-777:

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

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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.
 

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

 
- Es ist gut, dumm zu sein! Tumtz-tumtz (Text aus einem Lied)
 

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?

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);// Закрываем Buy
         if (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.

 
vik-777:

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)


 
Craft:

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("переменная=", значение);
}
 
Pyxlik2009:

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.
 
alsu:

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.