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

 

Können Sie mir sagen, wie ich den Indikator dazu bringe, nicht den aktuellen, sondern den maximalen Wert der letzten Per-Bars anzuzeigen? Ich habe Osma als Beispiel verwendet, aber er zeigt den aktuellen Wert im Strategy Tester an, wenn sich das Diagramm bewegt, und wenn man ihn einfach auf das Diagramm legt, ist nichts zu sehen:

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property   indicator_color1  Silver
#property   indicator_width1  2
//---- indicator parameters

extern int Per=12;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     OsmaBuffer1[];
double     OsmaBuffer[];
double     MacdBuffer[];
double     SignalBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(4);
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexDrawBegin(0,SignalSMA);
   IndicatorDigits(Digits+2);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,OsmaBuffer1);
   SetIndexBuffer(1,OsmaBuffer);
   SetIndexBuffer(2,MacdBuffer);
   SetIndexBuffer(3,SignalBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int start()
  {
   
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st additional buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loop
   for(i=0; i<limit; i++)
      OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- done
   for(i=0; i<limit; i++)
    {
     for(int b=0; b<Per; b++)
      {
       OsmaBuffer1[i] =OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,b)];
      }
    } 
  return(0);
  }
Всё разобрался, перемудрил просто))), достаточно этого:
for(i=0; i<limit; i++)
    {
     OsmaBuffer1[i] = OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,i)];
    } 
 
borilunad:
Ich verstehe das! Aber wie kann man diese Variable ("festgelegte Spanne") programmieren? Natürlich kann ich eine Variable "Spread" erstellen und sie jedes Mal ändern, wenn ich den Spread im Tester ändere. Sagen wir, Spread(TestGenerator) oder es gibt eine Funktion, oder man kann irgendwie eine solche Funktion machen, es kann nicht sein, dass man das nicht kann! А?


Bei der Prüfung gibt es eine bestimmte Spanne,

aber bei den meisten DCs ist sie variabel. Wenn Sie möchten, können Sie dies im Tester berücksichtigen. Testen Sie die Expert Advisors im Allgemeinen unter den ungünstigsten Bedingungen. D.h. mit maximaler Streuung, mit möglichen Verzögerungen bei der Auftragseröffnung, etc.

 
Sepulca:


Beim Testen gibt es eine bestimmte Streuung,

aber bei den meisten DCs ist sie variabel. Wenn Sie möchten, können Sie dies im Tester berücksichtigen. Testen Sie die Expert Advisors im Allgemeinen unter den ungünstigsten Bedingungen. D.h. mit maximaler Streuung, mit möglichen Verzögerungen bei der Auftragseröffnung, etc.

Ich verstehe und mache alles! Wollte nur den Spread wiedergeben, den ich im Prog eingestellt habe, denn im Tester ist Ask oft verzerrt, dann finde es durch Bid+Spread! Siehe Zweig MarketInfo funktioniert nicht im Tester! Dann werden Sie wissen, was los ist! Ich habe dort nachgefragt, aber es war niemand da! Deshalb hierher gezogen, dort geantwortet, wofür Sie und andere Ihnen danken!
 
Liebe Kollegen, bitte helfen Sie mir, eine vorgefertigte Funktion in einen EA einzubauen.
 

Hier ist die Funktion

bool isFlagHistoryPos(int mn=-1) {

datetime t;

int gd = MarketInfo(Symbol(),MODE_DIGITS);

int i, j=-1, k=OrdersHistoryTotal();

for (i=0; i<k; i++) {

if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (AuftragSymbol()==Symbol()) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (mn<0 || OrderMagicNumber()==mn) {

if (t<OrderCloseTime()) {

t=OrderCloseTime();

j=i;

}

}

}

}

}

}

if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY)) {

double ocp=NormalizeDouble(OrderClosePrice(),gd);

double otp=NormalizeDouble(OrderTakeProfit(),gd);

if(MathAbs(ocp-otp)/Point<=TPpoint) return(true);

}

return(false);

Der Expert Advisor selbst ist beigefügt

/* Dekompiliert von Vinin */

 
borilunad:
Ja, ich verstehe und mache alles! Ich wollte nur, dass der Spread, den ich einstelle, im Prog reflektiert wird, da Ask im Tester oft verzerrt ist und ich ihn dann über Bid+Spread finde! Siehe Zweig MarketInfo funktioniert nicht im Tester! Dann werden Sie wissen, was los ist! Ich habe dort nachgefragt, aber es war niemand da! Deshalb hierher gezogen, dort geantwortet, wofür Sie und andere Ihnen danken!

Scheiße, Boris. Ich habe schon einmal geschrieben. Nun, Sie können einen Floating Spread direkt im Expert Advisor imitieren. Was hindert mich daran, eine zufällige Zahl im Bereich der gleitenden Spanne zum Geldkurs hinzuzufügen und diesen mit Stopp-Aufträgen zu öffnen? Und schließen Sie nach Wert, nicht nach Stop-Order. Es ist komplizierter als eine größere statische Streuung, aber wenn Sie es wirklich brauchen, können Sie es tun. Stellen Sie gleichzeitig die Mindeststreuung im Prüfgerät ein.

Es ist nur so, dass... einen Gedankengang.

 
artmedia70:

Scheiße, Boris. Ich habe schon einmal geschrieben. Nun, machen Sie einen simulierten Floating Spread direkt in Ihrem EA. Was hält Sie davon ab, eine zufällige Zahl im Bereich der gleitenden Spanne zum Geldkurs hinzuzufügen und mit Stopp-Aufträgen zu eröffnen? Und schließen Sie nach Wert, nicht nach Stop-Order. Es ist komplizierter als eine größere statische Streuung, aber wenn Sie es wirklich brauchen, können Sie es tun. Stellen Sie gleichzeitig im Prüfgerät die Mindestspanne ein.

Das ist nur ... Eine Denkweise.

Danke Artem, das ist auf eine gute Art klüger! Ich werde es tun!
 

Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die durch Kreuzung winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht testen nichts (Compiler-Code mag es. Wie man es zumindest etwas zu zeigen?

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//---- indicator parameters
extern int RPeriod=13;
extern int RPrice=PRICE_CLOSE;
extern int RMethod=MODE_EMA;
//для желтой
extern int YPeriod=30;
extern int YPrice=PRICE_CLOSE;
extern int YMethod=MODE_EMA;
extern int Magic=17051994;
//профит и лось
extern int TakeProfit=150;
extern int StopLoss=30;
extern double lot=0.1;
double movingred,movingellow,SL,TP,movingred2,movingellow2;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int kolpos=0,pos;  
     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
         
        for(pos=0;pos <OrdersTotal();pos++)//считаю ордера чтобы советник не трогал в ручную выставленные ордера
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
            {
            kolpos++;
            }
        }
        if (kolpos==0)
         {
              //условвие для покупок продаж
              if(movingred2>movingellow2 && movingred<movingellow && Volume[0]<5)//продаем 
                  {
                    OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+StopLoss*Point,Bid-TakeProfit*Point,NULL,Magic,0,Green);
                  }
              if(movingred2<movingellow2 && movingred>movingellow && Volume[0]<5)//покупаем
                  {
                    OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-StopLoss*Point,Ask-TakeProfit*Point,NULL,Magic,0,Red);
                  }
          }
   return(0);
  }
 
LBatters:

Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die durch Kreuzung winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht testen nichts (Compiler-Code mag es. Wie man es zumindest etwas zu zeigen?

Sehen Sie sich jemals an, was Sie geschrieben haben?!

Irgendetwas sagt mir, dass "hier das Problem liegt":

     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
 
LBatters:

Hilfe mit dem Problem, bitte) Ich schrieb ein Expert Advisor, die auf überqueren winken funktioniert, aber wenn ich versuche, es zu testen, das Terminal piept und nicht alles testen (Compiler-Code mag. Wie man es so machen, dass er zumindest etwas zu zeigen?

//считаю ордера чтобы советник не трогал в ручную выставленные ордера

Wo wird er es anfassen? Ja, und es ist genug, um den Zauberer zu überprüfen, Handbuch ohne Zauberer.


Und, wie oben geschrieben, überschneiden sich die Maischen nicht...

Grund der Beschwerde: