[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 795

 
obla4ko:
Sie sollten nicht wie ein Stock denken - es ist eine sehr subtile Sache :))), virtuell, würde ich sagen, und es sollte natürlich auf Betrug in der Geschichte reagieren. Wenn es nicht auf Löschungen reagiert, dann kann ich mir vorstellen, wie langsam es im wirklichen Leben wäre - bestenfalls 100 Pfund pro Jahr für 10.000... Nun, es ist einfacher, das Geld auf der Bank zu lassen - die geben 3-6 Prozent!)

))) Natürlich ist es einfacher! Wer weiß das schon... // Und wer hat gesagt, dass es einfach sein würde? )))

Ein Ausweg ist der Gang zur Börse. So etwas gibt es dort im Prinzip nicht. Aber auf diese Weise... Für all die - wie soll ich es sagen - ähm... ... Seltsamkeiten, die Sie auch auf dem Forex bearbeiten können.

Am besten ist es natürlich, wenn Sie es auf einem echten Konto testen. Wenn die im Expert Advisor festgelegten Prinzipien korrekt sind (und dies kann im Tester genau überprüft werden), dann wird der Handel bei Anwendung von Maßnahmen höherer Gewalt auf einem realen Konto gut+ sein. Vielleicht nicht auf +++++++ wie im Testgerät, aber immerhin...))

Übrigens ist es sehr hilfreich, die Lücken, die die Indikatoren verrückt spielen lassen, aus dem Kursfluss zu entfernen. Sie können in meinen Codes nachsehen - Kill Gap.

 

Techno:
obla4ko, создайте переменную типа datetime x, и пусть это будет время открытие бара, на котором произошел стоплосс. А в условии открытия поставте, что (Time[0]!=x). При этом x должно обновляться при новом сработавшем стоплосе. Это первый вариант. И второй как я уже в третий раз пишу, после срабатывания стопа включить ожидание 1 бар, это будет совершенно тоже самое, не логично разве?

Ich habe den Teil des Codes, der für die Eröffnung einer Position verantwortlich ist, in meinem letzten Beitrag veröffentlicht. Könnten Sie bitte das, was Sie hier gesagt haben, in den Bericht aufnehmen - wie man so schön sagt "besser einmal gesehen als ...." :)
 

Hallo!!!

Auf Seite 71 dieses Threads hat granit77 einen sehr interessanten Beitrag geschrieben!

Извините, что встреваю, поделюсь ламерским способом удобной записи множества условий. При наладке легко добавлять/убирать, не заботясь о скобках, и все наглядно. 
if (true
    && StochK_0<StochD_1
    && StochD_1 > 80 
    && cci_0 < cci_1    
    && cci_0 > 100 
    //&& .... а это я пока убрал     
   )

hier ist ein Beispiel und versucht, etwas zu tun

if(((Sto_0>Sto_1&&Sto_0< 20)&&(OsMA_0>OsMA_1&&OsMA_0<-P)&&(Macd_0>Macd_1&&Macd_0<-N)))
// это основа
if(true
      &&Sto_0>Sto_1&&Sto_0< 20
      &&OsMA_0>OsMA_1&&OsMA_0<-P
      &&Macd_0>Macd_1&&Macd_0<-N
      )//а это то что получилось

Ich frage, weil es so ungewöhnlich ist.....

 

Warum funktioniert das und zählt richtig, wenn man den Wert einer Variablen um 10 Prozent erhöht:

TStartS = MathRound(TStartS+TStartS*0.1);

... aber das hier nicht:

TStartS = MathRound(TStartS+TStartS/100*PercentTakePr); // где PercentTakePr - внешняя переменная, равна 10, 20, 30, и т.д. ...
Was ist der Unterschied, ich weiß es nicht...
 
artmedia70:

Warum funktioniert das und zählt richtig, wenn man den Wert einer Variablen um 10 Prozent erhöht:

... aber das hier nicht:

Was ist der Unterschied, ich weiß es nicht...





Oder vielleicht ist es so.

TStartS = MathRound(TStartS+(TStartS/100*PercentTakePr)); 
 

Wo liegt das Problem? Sie müssen die Zeichenfolge nur in Teilzeichenfolgen zerlegen, ohne den Inhalt zu ändern. Alles funktioniert auf die gleiche Weise, aber es ist einfacher zu lesen und zu bearbeiten, kommentieren Sie einfach überflüssige Zeilen aus.

Es hat sich herausgestellt, dass die Profis schon seit langem so schreiben und sogar besser formatieren, also habe ich das Fahrrad erfunden. :))

if (true              &&
    StochK_0<StochD_1 && 
    StochD_1 > 80     &&  
    && cci_0 < cci_1  &&   
    && cci_0 > 100 
   )

//((Sto_0>Sto_1&&Sto_0< 20)&&(OsMA_0>OsMA_1&&OsMA_0<-P)&&(Macd_0>Macd_1&&Macd_0<-N))
// Ваш вариант вот так будет выглядеть наиболее прозрачно, на мой взгляд
if (true                         &&
    (Sto_0 >Sto_1  && Sto_0 <20) &&
    (OsMA_0>OsMA_1 && OsMA_0<-P) &&
    (Macd_0>Macd_1 && Macd_0<-N)  
   ) 
 
artmedia70:

Warum funktioniert das und zählt richtig, wenn man den Wert einer Variablen um 10 Prozent erhöht:

... aber das hier nicht:

Was ist der Unterschied - ich verstehe das nicht...





0,1 ist double und 100 ist int.

Schauen Sie im Lehrbuch nach unter Typumwandlung.

 
Svinozavr:

0,1 ist double und 100 ist int.

Schauen Sie im Lehrbuch nach, wie man Typen umwandelt.

Ich habe also ALLE Variablen dort int... Es stellt sich heraus, dass ... Autsch... Scheiß drauf ... graben Sie weiter...

So funktioniert es:

LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);
... und wenn Sie hier eine andere Variable desselben Typs einfügen, funktioniert es nicht... Es hat mich heute Morgen umgehauen...
 
obla4ko:

Ich habe den Teil des Codes, der für die Eröffnung einer Position verantwortlich ist, in meinem letzten Beitrag veröffentlicht. Könnten Sie bitte das, was Sie hier gesagt haben, in den Bericht aufnehmen - wie das Sprichwort sagt "besser einmal gesehen als ...." :)

Hier ist ein Schaltplan. Ich habe es nicht überprüft, aber es sollte funktionieren, fehlende Teile müssen aus dem Originalcode hinzugefügt werden. Rot markiert die Zahl, die Änderung wird die Wartezeit erhöhen, die Zahl 2 bedeutet, dass eine Kerze wartet. Wenn Sie 2 Kerzen brauchen, stellen Sie drei auf, usw.

bool work=1;int tick;datetime t;
int start()
{
  if(!work){if(t!=iTime(NULL,0,1)){t=iTime(NULL,0,1);tick++;}}
  if(tick==2){work=1;tick=0;} 
   
   time();
   if(OrdersTotal()==0)CheckForOpen();
  //-- code
}
//----
void CheckForOpen()
{
   double ma;
   int    res;
    
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);

   if(work && Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+Stoploss*Point,Bid-Takeprofit*Point,"",MAGICMA,0,Red);
      return;
     }

   if(work && Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-Stoploss*Point,Ask+Takeprofit*Point,"",MAGICMA,0,Blue);
      return;
     }

}
//----
void time()
{
static datetime time;
    
  if(OrdersHistoryTotal()==0)return;
  for(int i=0;i<OrdersHistoryTotal();i++)
       {
       OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
         if(OrderCloseTime()>time && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
            {
            time=OrderCloseTime();
            if(OrderProfit()<0)work=0;
            }
       }    
   
}
 
artmedia70:

Ich habe also ALLE Variablen dort int... Es stellt sich heraus, dass ... Autsch... Scheiß drauf ... graben Sie weiter...

Das funktioniert:

...aber wenn Sie einfach eine andere Variable desselben Typs einfügen, funktioniert es nicht... Das hat mich heute Morgen umgehauen...


Es ist... Ich habe es gefunden... Statt 100 sind es 100,0. Ich würde dich umbringen...