[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 22

 

Hallo. Hilfe für Dummies: Ich habe einen EA, der schwebende Orders auf dem Min. und Max. der vorherigen Kerze platzieren kann. Öffnung in Richtung der Kerze.

Die Notwendigkeit:

- Um die Eröffnungsrichtung zu ändern, d.h. von schwebendem Kauf zu schwebendem Verkauf.

- Min und Max der vorherigen Kerze anstelle von Min und Max des Vortages

- Lassen Sie alles andere wie es ist, d.h. löschen Sie Aufträge, Losparameter, Stop-Los, magische Zahl

Alle meine Aktionen führen entweder zu Fehler 130 im Tester oder kompilieren überhaupt nicht. Danke für jeden Rat.

Nachfolgend sehen Sie den funktionierenden Code, ohne mein Zutun.

extern double Lot = 0.01;
extern int StopLoss = 0;
extern int TakeProfit = 0;
extern int Magic = 618;

int Up_bars = 0;
int Down_bars = 0;

double StopLoss_new = 0;
double TakeProfit_new = 0;

//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----

for( int cnt=0;cnt<OrdersTotal();cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)>0)
{
if (
(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
&& OrderMagicNumber() == Magic
&& OrderSymbol() == Symbol()
&& OrderComment() != DoubleToStr(Bars,0)
)
{
Kommentar("okkk");
OrderDelete(OrderTicket());
}
}
}

StopLoss_new = StopLoss;
TakeProfit_new = TakeProfit;

if (Up_bars != Bars)
{
if (High[1]-Ask >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(High[1]-StopLoss*Point,Digits);
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(High[1]+TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(High[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000);
RefreshRates();
}
else
{
Up_bars = Bars;
}
}
}

StopLoss_new = StopLoss;
TakeProfit_new = TakeProfit;

if (Down_bars != Bars)
{
if (Bid-Low[1] >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(Low[1]+StopLoss*Point,Digits);
if (TakeProfit_new != 0) TakeProfit_neu = NormalizeDouble(Low[1]-TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Low[1],Digits),10,StopLoss_neu,TakeProfit_neu,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000);
RefreshRates();
}
else
{
Down_bars = Bars;
}
}
}


//----
return(0);
}
//+------------------------------------------------------------------+

 
delf:

Hallo. Hilf einem Dummkopf, das zu verstehen:

Haben Sie zufällig "Any Beginner's Question" mit "Complete redo the EA" verwechselt?
 
LazarevDenis:

Kapitän Offensichtlichkeit ... und doch gibt mir jemand einen Hinweis.

Ich gebe Ihnen einen Tipp: Fassen Sie diesen Ausdruck in Worte. Und Sie werden sehen, dass Sie sich falsch ausgedrückt haben.

PS.
Wenn es für Sie so offensichtlich ist, wo ein Fehler zu suchen ist, warum fragen Sie dann?

 
delf:


Wenn Fehler 130. Überdenken Sie das Anhalten und Mitnehmen.
 
LazarevDenis:

Bitte helfen Sie mir, die Order sollte mit dem 4-fachen des Abstandes vom Höchststand zum Orderopenprice schließen

Was habe ich falsch gemacht?

alle Aufträge schließen innerhalb von 3 Pips nach Eröffnung


Haben Sie versucht, das Ergebnis Ihrer Formel zu berechnen? Wenn nicht, dann tun Sie es, denn ich bekomme einen Scheißdreck. Vielleicht liegt es daran, dass ich nicht alle Bedingungen kenne.
 

Nur ein Fehler - ich weiß nicht, wie ich ihn beheben kann. Wo liegt das Problem?

'Symbol' - Initialisierung erwartet C:\Programmdateien\MetaTrader Finam\experts\1.mq4 (8, 13)

Symbol - Initialisierung erwartet C:\Programmdateien\MetaTrader Finam\experts\1.mq4 (8, 13)

extern double lot=0.1;
extern double tp=0;
extern double sl=0;
int Real_Order=-1;    // Пока рыночных нет

string Symb=Symbol;                        // Финанс. инструмент

int start()     // Спец. функция start()


{                                
   OrderSend(Symbol(),OP_BUY,0.1,Ask,0,Bid-sl*Point,Ask+tp*Point); 
   if(IsDemo()) PlaySound("alert.wav");
   
      for (int i=1; i<=OrdersTotal(); i++)       //Цикл по всем ордерам,..
     {                                        //отражённым в терминале
      if(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
        {  
               //--------------------------------------------------------------                                   
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         int Tip=OrderType();                   // Тип ордера
         if (Real_Order>1) continue;                   //отложник ордер  
         //------------------------------------------------------ 4 --
         double Price=OrderOpenPrice();         // Цена ордера
         if 
            NormalizeDouble(tp,sl,Digits)       // Выбор самого близкого орд       
           {         
            Real_Order=Tip;                     // Есть рыночный ордер
            int Ticket=OrderTicket();           // Номер ордера
            double Lot=OrderLots();             // Количество лотов
           }
        }                                       //Конец анализа ордера
     }                                          //Конец перебора орд.
     //---------------------------------------------------------------------+
    while(true)                                  // Цикл закрытия орд.
     {
      if (Real_Order==-1)                       // Если рыночных нет
        {
         Alert("По ",Symb," рыночных ордеров нет");
         break;                                 // Выход из цикла закр        
        }
      //--------------------------------------------------------- 7 --
      switch(Real_Order)                        // По типу ордера
        {
         case 0: double Price_Cls=Bid;          // Ордер Buy
            string Text="Buy ";                 // Текст для Buy
            break;                              // Из switch
         case 1: Price_Cls=Ask;                 // Ордер Sell
            Text="Sell ";                       // Текст для Sell
        }
      Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
      bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера
      //--------------------------------------------------------- 8 --
      if (Ans==true)                            // Получилось :)
        {
         Alert ("Закрыт ордер ",Text," ",Ticket);
         break;                                 // Выход из цикла закр
        }    
       //--------------------------------------------------------- 9 --
      int Error=GetLastError();                 // Не получилось :(
      switch(Error)                             // Преодолимые ошибки
        {
         case 135:Alert("Цена изменилась. Пробуем ещё раз..");
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
         case 136:Alert("Нет цен. Ждём новый тик..");
            while(RefreshRates()==false)        // До нового тика
               Sleep(1);                        // Задержка в цикле
            continue;                           // На след. итерацию
         case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
            Sleep(500);                         // Простое решение
            RefreshRates();                     // Обновим данные
            continue;                           // На след. итерацию
        }
      switch(Error)                             // Критические ошибки
        {
         case 2 : Alert("Общая ошибка.");
            break;                              // Выход из switch
         case 5 : Alert("Старая версия клиентского терминала.");
            break;                              // Выход из switch
         case 64: Alert("Счет заблокирован.");
            break;                              // Выход из switch
         case 133:Alert("Торговля запрещена");
            break;                              // Выход из switch
         default: Alert("Возникла ошибка ",Error);//Другие варианты   
        }
      break;                                    // Выход из цикла закр
     }  
 
   
   return;                                   // Выход из start()
  }
 

alex12, geben Sie etwas Konkretes an, etwa

string Symb="EURUSD";                        // Финанс. инструмент
 
alex12:

Nur ein Fehler - weiß nicht, wie man ihn behebt. Wo liegt das Problem?

'Symbol' - Initialisierung erwartet C:\Programmdateien\MetaTrader Finam\experts\1.mq4 (8, 13)

Symbol - Initialisierung erwartet C:\Programmdateien\MetaTrader Finam\experts\1.mq4 (8, 13)

Sie haben:

string Symb=Symbol;                        // Финанс. инструмен

Das müssen Sie:

string Symb=Symbol();                        // Финанс. инструмент
Wenn Sie auf die Fehlermeldung doppelklicken, springt der Cursor an die (übrigens) angegebene Stelle, an der der Kompilierungsfehler aufgetreten ist, d. h. hier: (8, 13)

Danach werden andere Fehler ausgelöst... :)

Verschieben Sie die obige Zeile an den Anfang der Funktion start()

Das ist ein Anfang - dann sollten Sie sich um die anderen Fehler kümmern...

 

Hallo zusammen.

Leute, wir brauchen etwas Hilfe. Beschreiben Sie die Situation.

der aktuelle Preis ist 1,4100 (zum Beispiel) Ich muss eine Bar, deren offen ist innerhalb (plus oder minus 10 pt von 1,4100) von 1,4090 bis 1,4110 zu finden - das ist ok.

Zum Beispiel hat das Programm den Balken mit der Eröffnung bei 1,4105 gefunden, der zu mir passt.

Dann sollte das Programm diesen Balken mit dem Balken links und rechts davon vergleichen, und wenn er niedriger ist, ist er geeignet.

 

Artem, der Trick dabei ist, dass es unten eine Zeile wie diese gibt:

if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.

Der von Ihnen vorgeschlagene Weg macht also nicht viel Sinn - wenn ich richtig verstehe, was alex12 will.

Grund der Beschwerde: