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

 
TarasBY:

Ich habe nicht mit dieser Funktion gearbeitet. Die Annahme ist, dass, wenn das Terminal einmal ein Zeichen auswählt, der nächste Versuch, das gleiche Zeichen auszuwählen, falsch sein kann. Versuchen Sie, die Rückgabeprüfung durch diese Funktion zu ignorieren.

Es stellt sich heraus, dass SymbolSelect("AUDUSD", true) nur dann true zurückgibt, wenn AUDUSD nicht in MarketWatch enthalten ist, d.h. wenn das Paar zu MarketWatch hinzugefügt wird. Sobald das Paar in MarketWatch ist, geben nachfolgende Aufrufe false zurück.

Dieses Verhalten entspricht in keiner Weise dem Handbuch für diese Funktion.

Ich musste eine selbst geschriebene Funktion verwenden, die alleSymbolName(i, true) für i=0...SymbolsTotal(true) durchsucht.

 
Mr.Profit:

Es stellt sich heraus, dass SymbolSelect("AUDUSD", true) nur dann true zurückgibt, wenn AUDUSD nicht in MarketWatch enthalten ist, d.h. wenn das Paar zu MarketWatch hinzugefügt wird. Sobald das Paar in MarketWatch ist, geben nachfolgende Aufrufe false zurück.

Dieses Verhalten entspricht in keiner Weise dem Handbuch für diese Funktion.

Irgendetwas sagt mir, dass wir ohne SymbolSelect() auskommen können.
 
TarasBY:
Irgendetwas sagt mir, dass Sie ohne SymbolSelect() auskommen können.

Ja, ich habe gerade meinen Beitrag oben aktualisiert.
 
borilunad:

Welches ist das andere, oder sollten wir uns schon mal auf die Socken machen?


Meister Forex

 
laveosa:
Ich habe 4 Monate gebraucht, um eine Eule auf alpari..... zu erstellen. nano quanto code ist sehr verdammt zeitaufwendig und nicht klein..... und jetzt ist alles !!!!! es ist eine Schande .... Ich bin mir nicht sicher, was ich damit anfangen soll.

Dritte Eule und immer noch der gleiche Fehler, zum Glück ist das Problem nicht mit dem Code :)
 
Die Sache ist die: Ich habe ein neues "Nein" (es ist ein Hochgeschwindigkeits-Glasfaserkabel mit einer Download-Geschwindigkeit von 7 MB pro Sekunde.) und danach hatte ich dasselbe mit Alpari, aber mit Master Forex ist alles OK und Admeral auch ......... hier ist eine weitere Nuance, der Broker ist auf dem Laufwerk D: installiert) bei der Neuinstallation des Betriebssystems habe ich kein neues installiert und das alte verwendet .... Vielleicht sollte ich es installieren?
 
laveosa:


Meister Forex


Danke, ich werde es mir ansehen!
 
borilunad:

Danke, ich werde es mir ansehen!

Ich mache keinen Wahlkampf, ich beantworte nur eine Frage :)
 

Hallo zusammen. Ich habe vor nicht allzu langer Zeit begonnen, EAs zu schreiben. Ich stehe vor einem scheinbar elementaren Problem, das ich nicht lösen kann. Bitte helfen Sie mir.

Das Problem. Bei einem neuen Tick verliere ich den Wert einer Variablen.

Kurze Beschreibung. Weisen Sie einer Variablen den Rückgabewert der Funktion OrderSend() zu und beenden Sie sie mit dem Return-Befehl. Beim nächsten Tick wird der Wert der Variablen gleich Null.

Das Schlüsselelement des Quellcodes. Den vollständigen Quellcode finden Sie unten.

if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red);
Alert ("Der Variablen ticket_sell wurde ein Wert zugewiesen", ticket_sell);
Rückkehr;
}
}

Alert ("Exist position = ", position_exists, "Buy order ", ticket_buy, "Sell order ", ticket_sell);

Ergebnis.

Der Screenshot zeigt, dass die Position erfolgreich eröffnet wurde und das Orderticket in der Variable ticket_sell gespeichert wurde. Die Variable ticket_sell wird jedoch beim nächsten Tick auf Null gesetzt. Und ich kann die Bestellung auf dem Ticket nicht ändern/löschen.

// Простой параболик. Переворотная стратегия.
// В условиях, когда в терминале уже есть открытые позиции по другим инструментам.

input double TakeProfit    =2500;
input double StopLoss      =400;
input double Lots          =1;
input double TrailingStop  =100;

input double Parameter1    =0.02; // Параметры индикатора PSAR
input double Parameter2    =0.2;
   
void OnTick()
{
int position_exists; // Переменная, принимающая значения 0 или 1. Указывает, открыта ли позиция по интструменту EURUSD

// Занесение в переменные значений индикатора на последнем и предпоследнем закрывшихся барах  
double SAR_Prev=iSAR(NULL,0,Parameter1,Parameter2,1);
double SAR_Prev2=iSAR(NULL,0,Parameter1,Parameter2,2);
// Занесение в переменные цен закрытия на последнем и предпоследнем барах
double LastClose=iClose(NULL,0,1);
double LastClose2=iClose(NULL,0,2);

  
//---------------------------------------------------------------------     
// Блок, который определяет, открыта ли позиция по инструменту EURUSD
// путём перебора всех открытых ордеров терминала в цикле. 
// Если позиция открыта, то переменной position_exists будет присвоено значение 1
int cnt;
string sym;
int type;

int total=OrdersTotal();
position_exists=0;
for (cnt=0; cnt<=total-1; cnt++)
   {
    bool select=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    sym=OrderSymbol();
    type=OrderType();
    if (sym=="EURUSD" && (type==1 || type==0)) 
      {
       position_exists=1;
       break;
      }
   }     
//--------------------------------------------------------------------- 
// Если позиция по EURUSD не существует, то проверяем условия открытия сделки  
   if(position_exists==0)
      {
       if (SAR_Prev<LastClose && SAR_Prev2>LastClose2)
         {
          int ticket_buy=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point," ",111,0,Blue);
          Alert ("Присвоили значение пременной ticket_buy ", ticket_buy);
          return;
         }
         
       if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
         {
          int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point," ",111,0,Red);
          Alert ("Присвоили значение пременной ticket_sell ", ticket_sell);
          return;
         }
      }
      
   Alert ("Существование позиции = ", position_exists, " Ордер на покупку ", ticket_buy, " Ордер на продажу ", ticket_sell);
//--------------------------------------------------------------------- 
// Если позиция по EURUSD существует, то проверяем условия закрытия позиции  
   if (position_exists==1)
      {
       if (ticket_sell==0) // Если открытой позиции на продажу нет, то выбираем открытый ордер на покупку по тикету
         {bool select_buy=OrderSelect(ticket_buy,SELECT_BY_TICKET,MODE_TRADES);}
         
       if (ticket_buy==0) // Если открытой позиции на покупку нет, то выбираем открытый ордер на продажу по тикету
         {bool select_sell=OrderSelect(ticket_sell,SELECT_BY_TICKET,MODE_TRADES);}
         
       
       if(OrderType()==OP_BUY) 
         {
          if(SAR_Prev>LastClose && SAR_Prev2<LastClose2) // Проверяем уловия для закрытия длинной позиции
              {
               bool close_buy=OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet);
               return;
              }
         }
        
        
        if(OrderType()==OP_SELL)
         {
          if(SAR_Prev<LastClose && SAR_Prev2>LastClose2) // Проверяем уловия для закрытия короткой позиции
              {
               bool close_sell=OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet);
               return;
              }
          } 
       }
} 

 
Sergey71:

Hallo zusammen. Ich habe vor nicht allzu langer Zeit angefangen, EAs zu schreiben. Ich stehe vor einem scheinbar elementaren Problem, das ich nicht lösen kann. Bitte helfen Sie mir.

Das Problem. Bei einem neuen Tick verliere ich den Wert einer Variablen.

Kurze Beschreibung. Weisen Sie einer Variablen den Rückgabewert der Funktion OrderSend() zu und beenden Sie sie mit dem Return-Befehl. Beim nächsten Tick wird der Wert der Variablen gleich Null.

Das Schlüsselelement des Quellcodes. Den vollständigen Quellcode finden Sie unten.

if (SAR_Prev>LastClose && SAR_Prev2<LastClose2)
{
int ticket_sell=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,",111,0,Red);
Alert ("Der Variablen ticket_sell wurde ein Wert zugewiesen", ticket_sell);
Rückkehr;
}
}

Alert ("Exist position = ", position_exists, "Buy order ", ticket_buy, "Sell order ", ticket_sell);

Ergebnis.

Der Screenshot zeigt, dass die Position erfolgreich eröffnet wurde und das Orderticket in der Variable ticket_sell gespeichert wurde. Die Variable ticket_sell wird jedoch beim nächsten Tick zu Null. Und ich kann die Bestellung auf dem Ticket nicht ändern/löschen.


Um zu vermeiden, dass der Wert verloren geht, benötigen wir eine globale Variable, deren Deklaration außerhalb vonOnTick() liegt oder die statisch ist
Grund der Beschwerde: