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

 
Bitte antworten Sie in der Reihenfolge ihrer Priorität. Ich habe einen Indikator, der durch ein Balkendiagramm angezeigt wird. Beim Beitritt oder nach einer erneuten Verbindung wird ein Cent-Betrag angezeigt. Ich habe die Bedingung auf den ersten Start gesetzt, um die 0. Zelle des Arrays zurückzusetzen. Und ich habe es auf inite gestellt - es hat nicht geholfen. Ich habe es beim Start zurückgesetzt - ok. (Ich habe eine Bedingung an den Anfang gestellt: if(GetLastError()==6)zas[0]=0.0; - das hilft nicht.
 
dikson1976-1:
Bitte antworten Sie in der Reihenfolge ihrer Priorität. Ich habe einen Indikator, der durch ein Balkendiagramm angezeigt wird. Beim Beitritt oder nach einer erneuten Verbindung wird ein Cent-Betrag angezeigt. Ich habe die Bedingung auf den ersten Start gesetzt, um die 0. Zelle des Arrays zurückzusetzen. Und ich habe es auf inite gestellt - es hat nicht geholfen. Ich habe es beim Start zurückgesetzt - ok. (Ich habe eine Bedingung an den Anfang gestellt: if(GetLastError()==6)zas[0]=0.0; - das hilft nicht.

Ich kann nicht ohne Code auskommen.
 

Dozol:



Versuchen Sie, die Aufträge in umgekehrter Reihenfolge durchzugehen.

 for(i=OrdersTotal()-1;i>=0;i--)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         {
     // и тд
         }
       }
 
Ich habe es selbst in die Hand genommen. Immer mit der Ruhe. Ich danke Ihnen allen.
 
Dozol:

Freunde, helft mir. Ich muss alle Aufträge für ein ausgewähltes Währungspaar schließen. Hier ist, was ich geschrieben habe (Teil des EA-Codes):

int Zakrit_vse() ...

SRC zum Einfügen des Codes im Forum verwenden

Ich werde sie hier einfügen, vielleicht finden Sie etwas Interessantes für sich selbst:

int Zakrit_vse()
{  
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
      
         //--- Close pending orders
         if (OrderType()==OP_BUYLIMIT  ||
             OrderType()==OP_BUYSTOP   ||
             OrderType()==OP_SELLLIMIT ||
             OrderType()==OP_SELLSTOP)         
         {  
            OrderDelete(OrderTicket(),CLR_NONE)
            Prov_oshibok();
            return(0);
         }
         
         //--- Close opened position BUY
         if (OrderType()==OP_BUY)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
         //--- Close opened position SELL
         if (OrderType()==OP_SELL)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
}  }  }
}
 
Dozol:

Freunde, helft mir. Ich muss alle Aufträge für ein ausgewähltes Währungspaar schließen. Hier ist, was ich geschrieben habe (Teil des EA-Codes):


Warum das Rad neu erfinden, wenn alles schon vor Ihnen erfunden wurde? Zum Beispiel. Vergessen Sie das nicht.
 

Hilfe! Ich habe Code für einen externen Kanal-Indikator (wenn die obere Grenze des Kanals erreicht wird, öffnet sich der Handel zu verkaufen - schließt, wenn die untere Grenze erreicht wird, in umgekehrter Reihenfolge zu kaufen). Aus unbekannten Gründen werden keine Trades geöffnet, ich kann den Fehler nicht finden. Funktioniert perfekt mit einer anderen Kanalanzeige. Ich möchte gleich angeben, dass alle Puffer gesetzt sind.

Der Code ist beigefügt.

extern double Lots = 0.1;
extern string Kommentar = "TMA-Kanal2";
extern int TakeProfit = 20;
extern int StopLoss = 20;
extern int Schlupf = 2; // Schlupf
extern int Magic = 124;

externer String Indi = "Indikatordaten";
extern string TimeFrame = "aktueller Zeitrahmen;
extern int TMAPeriod = 56;
extern int Preis = PRICE_CLOSE;
extern double ATRMultiplier = 2.0;
extern intTRPeriod = 100;
extern double TrendThreshold = 0.5;
extern bool ShowCenterLine = false;

double PriceHigh, PriceLow, SL, TP;
int-Ticket;

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
if (Ziffern ==3 || Ziffern ==3) // für einen fünfstelligen Makler
{
TakeProfit *= 10;
StopLoss *= 10;
Schlupf *= 10;
}
zurück(0);
}

//+------------------------------------------------------------------+
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()==124)
{
if(OrderType()==OP_BUY) kauft++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- Rücksendeauftragsvolumen
if(Käufe>0) return(Käufe);
sonst return(-sells);
}

//+------------------------------------------------------------------+
//| Prüfung auf offene Auftragsbedingungen |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double PriceHigh, PriceLow;
int-Ticket;
//---- nur für die ersten Ticks der neuen Bar handeln
if(Volumen[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);


if(Open[1]>PreisHoch || Close[1]>PreisHoch || High[1]>PreisHoch && Ask<=PreisHoch)

{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "TMA Canal2",124,0,Red);
Rückkehr;
}
//---- Kaufbedingungen
if(Open[1]<PreisTief || Close[1]<PreisTief || Low[1]<PreisTief && Bid>=PreisTief)

{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "TMA Canal2",124,0,Blue);
Rückkehr;
}
//----
}
//+------------------------------------------------------------------+
//| Prüfung auf enge Auftragsbedingungen |
//+------------------------------------------------------------------+
void CheckForClose()
{
double PriceHigh, PriceLow;
//---- go trading nur für die ersten Ticks der neuen Bar
if(Volumen[0]>1) return;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) weiter;
//---- Auftragsart prüfen
if(Auftragsart()==OP_BUY)
{
if(Open[1]>PreisHoch || Close[1]>PreisHoch || High[1]>PreisHoch) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
Pause;
}
if(OrderType()==OP_SELL)
{
if(Open[1]<PreisTief || Close[1]<PreisTief || Low[1]<PreisTief) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
Pause;
}
}
//----
}

//+------------------------------------------------------------------+
//| 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();
//----
}
//+------------------------------------------------------------------+

 
ZahvatkiN:

Ich bin neu in mql4, ich weiß, wie man mit SL und TP arbeitet, aber ich habe ein Problem, wenn ich Aufträge durch ein Reverse-Indikator-Signal schließen muss. ich habe keine Ahnung, wie die OrderSelect() Funktion funktioniert. Ich weiß, dass, um für einen Auftrag, den wir verwenden eine Schleife zu suchen, ist es in den Code, aber in den Prozess des Handels stellt sich heraus, dass der Auftrag gerade geöffnet und sofort geschlossen, da die Bedingungen für die Eröffnung eines Kaufs deckt sich mit den Bedingungen für die Schließung eines Verkaufs und wie es zu erklären, dass dies nicht tun sollte ich nicht verstehen, bitte erklären.

Die Schaltfläche SRC wird zum Einfügen des Codes verwendet!

Wenn Sie es geschrieben haben, fügen Sie auch Ergänzungen in der Dokumentation hinzu!

Wenn Sie kopiert haben, wenden Sie sich bitte an den Autor für Revisionen oder um zu arbeiten!

 


Ich füge ein weiteres Mal hinzu. Wie oft habe ich Ihnen schon gesagt, dass Sie die Schaltfläche in der obersten Zeile verwenden sollen, um den Code einzufügen

Und es ist wünschenswert, sich an die Schreibstile zu halten.... Wünschenswert, aber nicht unbedingt erforderlich. Die meisten Menschen antworten jedoch eher mit leicht verständlichem Code.

 

Ich bin neu in mql4, ich bin gut im Umgang mit SL und TP, aber ich habe ein Problem, wenn ich Aufträge durch ein gekreuztes Signal von einem Indikator schließen muss. Ich verstehe nicht wirklich, wie die OrderSelect() Funktion funktioniert. Ich weiß, dass die Schleife verwendet wird, um für Aufträge zu suchen, ist es in den Code, aber in den Prozess des Handels stellt sich heraus, dass der Auftrag gerade geöffnet und sofort geschlossen, weil die Bedingungen für die Eröffnung eines Kaufs mit den Bedingungen für die Schließung des Verkaufs zusammenfallen und wie es zu erklären, dass dies nicht tun sollte ich nicht verstehen, bitte erklären.

borilunad danke für den Tipp, habe es neu gemacht, dann kann man auch die Nachricht mit dem Zitat löschen, um es nicht zu überladen.

if(buy1sOpen())
         {
         OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "", magic, 0, Blue);
         }
      if(sell1sOpen()) 
         {
         OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "", magic, 0, Red);
         }
         
      for(int i=0; i<OrdersTotal(); i++)
         {
         OrderSelect(i,SELECT_BY_POS);
         if(buy1sClose()) 
           {
           OrderClose(i, lots, Ask, Slippage, Blue);
           }
         if(sell1sClose()) 
           {
           OrderClose(i, lots, Bid, Slippage, Red);
           }
         }
         
      }
   }
bool buy1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
bool sell1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool buy1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool sell1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }