Und machen wir einen "Cartoon" daraus (Mehrwährung) - Seite 2

 

Sie können meine Funktion leicht abändern, um die Gesamtzahl der Aufträge für ein bestimmtes Instrument und einen bestimmten Magier zu ermitteln.

 
ALex2008 писал(а) >>

Wenn Sie nicht wissen, was Sie damit tun sollen, können Sie um Hilfe bitten. Das Wesen einer Sache - um es auf mehrere Paare, nicht auf eine) Und um es auf einer Demo zu testen ist kein Problem, nur einen Monat oder zwei, aber das Ergebnis ist interessant)

Formulieren Sie die Logik des mehrstufigen Expert Advisors, je detaillierter, desto besser, und vielleicht brauchen Sie keine Hilfe.

In der Regel ist ein klares Verständnis der Aufgabe zu 90 % für ihren Erfolg verantwortlich.

 
sergeev >> :

Und übrigens, Sie haben Fehler in Ihrem Code, sehr viele!

iLow(PERIOD_H4,0,0) - was ist das?

Tiefpunkt der aktuellen Kerze))

In der Tat...! Wie funktioniert das dann im Test?

Ich verstehe nicht, wie es dazu gekommen ist. Es sollte iLow(NULL,PERIOD_H4,0) sein.

 
xeon >> :

Formulieren Sie die Logik des multivalenten Sachverständigen, je detaillierter, desto besser, und Sie brauchen vielleicht keine Hilfe.

In der Regel ist ein klares Verständnis der Aufgabe zu 90 % für ihren Erfolg verantwortlich.

An der Logik ist nichts auszusetzen, ich habe nur keine Erfahrung. Ich verstehe, dass Sie Bestellungen nach jedem Attribut verfolgen müssen, aber da ich so etwas noch nie geschrieben habe, fürchte ich, dass es nur eine Frage geben wird... über Funktionen und ihre Umsetzung)

 
ALex2008 писал(а) >>

An der Logik ist nichts auszusetzen, ich bin nur unerfahren... Ich verstehe die Notwendigkeit, Bestellungen nach jedem Attribut zu verfolgen, aber da ich so etwas noch nie geschrieben habe, fürchte ich, dass es nur eine Frage geben wird... über Funktionen und ihre Umsetzung)

Siehe vorherige Seite für die Funktion

 
Vinin >> :

Siehe die Funktion auf der vorherigen Seite

Danke) Ich werde versuchen, es in den Code einzubauen)

Angefangen zu schreiben...

#define MAGIC 7779

anstelle dieses -

   if(OrdersTotal()==0){
      mod=false;
      SetOrders();}

dies zu schreiben -

   if( Order_Count_Calculate(Symbol(), MAGIC)==0){
      mod=false;
      SetOrders();}

... es schlägt fehl - 'Order_Count_Calculate' - Funktion liefert kein Ergebnis

Wenn ich es richtig verstehe, soll die Funktion alle Aufträge des aktuellen Symbols Symbol() mit einem MAGIC
 
ALex2008 писал(а) >>

Danke) Ich werde versuchen, es in den Code einzubauen)

Angefangen zu schreiben...

Das ist genau das, was Sie nicht wollen extern string _Symbol = Symbol();

Obwohl eine Variable definiert werden kann und es besser ist, einen Wert in inite() oder start() zuzuweisen

 
Ich bin über die erste Funktion gestolpert...( Ich verstehe den Sinn, aber ich weiß nicht, wie man sie richtig benutzt...
 
ALex2008 писал(а) >>

An der Logik ist nichts auszusetzen, ich bin nur unerfahren... Ich verstehe die Notwendigkeit, Bestellungen nach jedem Attribut zu verfolgen, aber da ich so etwas noch nie geschrieben habe, fürchte ich, dass es nur eine Frage geben wird... über Funktionen und ihre Umsetzung)

Eh.... Ich fürchte, du verstehst nicht..............

die Aufgabe - "ich will, dass es fliegt", es ist keine Logik - was flog, wo es flog etc. etc.

--------------------------------------------

Ein kurzes Beispiel für die Aufgabe:

Gleichzeitige Verwendung von EURUSD, GBPUSD, USDCHF, USDJPY.

H1 Zeitraum.

......................

Währungspaar-Auswahlbedingung

KAUFEN Bedingung

SELL Einstellung Bedingung

.......................

Hier ist ein kurzes Beispiel für die Umsetzung:

int MAGIC = 322223;
string Sym[]={"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};    //Внесем в массив валютные пары с которыми будем работать
int start(){
   
   int s = SymbolSelect();                   //Функция выбора валютной пары
   if( SelectOrder( Sym[ s],OP_BUY, MAGIC)<0){   //Если нет установленного ордера по выбранному символу
      UpTrend( Sym[ s]);                       //Проверим условие установки ордера 
   }
   if( SelectOrder( Sym[ s],OP_SELL, MAGIC)<0){  //Если нет установленного ордера по выбранному символу
      DownTrend( Sym[ s]);                     //Проверим условие установки ордера 
   }

}


int SymbolSelect(){
  int s=-1;
  //Условие выбора валютной пары для работы  
   
  return( s)
}
    //+-------------------Выбор ордера---------------------------+
int SelectOrder(string Sym,int Tip,int MAGIC){
    int TotOrd=OrdersTotal();
    int OrdTick=-1;
    for(int OrdPos= TotOrd-1; OrdPos>=0; OrdPos--){
        if(OrderSelect( OrdPos, SELECT_BY_POS, MODE_TRADES)==true){
           if(OrderSymbol()== Sym){                                           //Есть ли ордера с нужным символом
              if(OrderType()== Tip){                                          //Если нужный тип ордера  
                 if( MAGIC==0){ MAGIC=OrderMagicNumber();}                     //Если магик = 0,неучитывать
                 if(OrderMagicNumber() == MAGIC){                            //Есть ли ордера с нужным Магик номером
                    OrdTick = OrderTicket(); break;                          //Запишем в переменную его тикет и прервем цикл 
    }}}}}
    return( OrdTick);                                                         //Возвращает тикет найденного ордера или -1
}
bool UpTrend(string Sym){
     //Условие установки BUY ордера
}
bool DownTrend(string Sym){
    //Условие установки SELL ордера
}

usw.

Ich meine, wenn man die Logik im Detail durchdenkt, wird man keine Probleme mit der Umsetzung haben.

 
xeon >> :

...Ich meine, wenn man die Logik im Detail durchdenkt, wird man keine Probleme mit der Umsetzung haben.

Ich werde heute darüber nachdenken... Ich glaube, ich habe Kopfschmerzen gefunden)) Ich danke Ihnen.

Wie auch immer, hier ist ein Entwurf mit Fehlern... >> korrigieren Sie mich.)

extern double Profit = 3000;

int MAGIC = 322223;

string Sym[]={"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};    //Внесем в массив валютные пары с которыми будем работать

double b0, b1, s0, s1, StopLoss, Enter;
bool dwnSym, upSym, mod;

int init(){ Profit*=Point;
}

int start()
{
   
      int s = SymbolSelect();                      //Функция выбора валютной пары
      if( SelectOrder( Sym[ s],OP_BUYSTOP, MAGIC)<0){  //Если нет установленного ордера по выбранному символу
         UpTrend( Sym[ s]);                          //Проверим условие установки ордера 
         }
      if( SelectOrder( Sym[ s],OP_SELLSTOP, MAGIC)<0){ //Если нет установленного ордера по выбранному символу
         DownTrend( Sym[ s]);                        //Проверим условие установки ордера 
         }
      
      
      if( SelectOrder( Sym[ s],OP_BUYSTOP, MAGIC)>0 && AccountProfit()&& (! mod)){  //Если установлен ордер по выбранному символу
         SetStopBuy( Sym[ s]);                                                  //и он открылся, ставим стоп
         }
      if( SelectOrder( Sym[ s],OP_SELLSTOP, MAGIC)>0 && AccountProfit()&& (! mod)){ //Если установлен ордер по выбранному символу
         SetStopSell( Sym[ s]);                                                 //и он открылся, ставим стоп
         }
}

   int SymbolSelect(){
   int s=-1;
   return( s);}
   
//+-------------------Выбор ордера---------------------------+
   int SelectOrder(string Sym,int Tip,int MAGIC){
      int TotOrd=OrdersTotal();
      int OrdTick=-1;
      for(int OrdPos= TotOrd-1; OrdPos>=0; OrdPos--){
         if(OrderSelect( OrdPos, SELECT_BY_POS, MODE_TRADES)==true){
            if(OrderSymbol()== Sym){                                           //Есть ли ордера с нужным символом
               if(OrderType()== Tip){                                          //Если нужный тип ордера  
                  if( MAGIC==0){ MAGIC=OrderMagicNumber();}                     //Если магик = 0,неучитывать
                  if(OrderMagicNumber() == MAGIC){                            //Есть ли ордера с нужным Магик номером
                     OrdTick = OrderTicket(); break;                          //Запишем в переменную его тикет и прервем цикл 
      }}}}}
    return( OrdTick);}                                                         //Возвращает тикет найденного ордера или -1


//Условие и установка BUY ордера
   bool UpTrend(string Sym){
       
       if((iOpen( Sym,PERIOD_H4,1) - iClose( Sym,PERIOD_H4,1) <= 0) &&
         (iOpen( Sym,PERIOD_H4,2) - iClose( Sym,PERIOD_H4,2) > 0)){
          upSym=false;
          dwnSym=true;
          CloseOpenOrdersAndCancelPending();
          double Enter=iHigh( Sym,PERIOD_H4,1)+(Ask-Bid)+10*Point;
          OrderSend( Sym, OP_BUYSTOP, 0.1, Enter, 0, 0, Ask+ Profit, 0, 0,0, Green);}
   }

//Условие и установка SELL ордера
   bool DownTrend(string Sym){
       
       if((iOpen( Sym,PERIOD_H4,1) - iClose( Sym,PERIOD_H4,1) >= 0) &&
         (iOpen( Sym,PERIOD_H4,2) - iClose( Sym,PERIOD_H4,2) < 0)){
          upSym=true;
          dwnSym=false;
          CloseOpenOrdersAndCancelPending();
          double Enter=iLow( Sym,PERIOD_H4,1)-10*Point;
          OrderSend( Sym, OP_SELLSTOP, 0.1, Enter, 0, 0, Bid- Profit, 0, 0,0, Green);}
         
   }
   
//-------Вычисление и утановка стопа для бай
void SetStopBuy(string Sym)
   {
      RefreshRates();
      double b0=iLow( Sym,PERIOD_H4,0)-10*Point;
      double b1=iLow( Sym,PERIOD_H4,1)-10*Point;
      
            if( b0< b1) StopLoss= b1;
            else StopLoss= b0;
            RefreshRates();
            mod=OrderModify( OrdTick,OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
   } 
   
 //-------Вычисление и утановка стопа для сел
void SetStopSell(string Sym)
   {
      RefreshRates();
      double s0=iHigh( Sym,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      double s1=iHigh( Sym,PERIOD_H4,1)+(Ask-Bid)+10*Point;
      
            if( s0< s1) StopLoss= s0;
            else StopLoss= s1;
            RefreshRates();
            mod=OrderModify( OrdTick,OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
   }
   
void CloseOpenOrdersAndCancelPending()
   {
      for (int i=OrdersTotal()-1; i>=0; i--){
      if (!OrderSelect( i, SELECT_BY_POS))  continue;
      if (OrderSymbol()!= Sym)        continue;
      OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10);}
   }