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

 
dmmikl86 >> :

Liebe Forumsnutzer!

Ich habe einen Indikator geschrieben und das Problem ist, dass ich den gleitenden Durchschnitt (Buf_2) nicht zeichnen kann, hier ist der Code:

Helfen Sie mir zu verstehen, wo das Problem liegt?

Und warum sollte es gezeichnet werden, wenn man die Schleife nicht nach //average und i<0 betritt, da man sonst nicht aus der vorherigen Schleife herauskommt

 i++; // поставьте здесь увеличение на один и всё заработает или присвойте i=0; напрямую ноль
//====================================================================
// average
int n=0;
   while( i>=0) 
      {  
       //----
       while( n<= average){
         Buf_2[ i]= Buf_1[ i- n];
         n++;
         }
       
       i--;
       //----
      }

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

Guten Tag)


Sorry für die Einmischung, ich habe bereits diese Frage gestellt, aber nicht die Antwort bekommen( Wie auch immer, während der Woche, nichts hat sich bewegt


Können Sie mir sagen, wie man eine Funktion schreibt, die einen schwebenden Auftrag platziert?


Was sollte ich anstelle von Bid oder Ask eingeben? Ich benötige eine Pending-Order beim High einer der Kerzenständer. Wie erhalte ich diesen Wert und wie muss ich ihn in die Funktion eingeben? Dieser Preis ist möglicherweise nicht im Handelsfluss enthalten. Ich frage mich, ob Sie den Code für das Einstellen eines schwebenden Auftrags herausgeben könnten und, was noch wichtiger ist, woher Sie den Preis für die Einstellung bekommen!

 

Zum Beispiel (Beispiel für das Setzen eines Kaufstopps) :

(Es ist keineswegs erforderlich, dass der eingestellte Preis im Kursstrom enthalten ist, um einen schwebenden Auftrag einzustellen.

Sie können mit dem aktuellen Kurs tanzen oder einen beliebigen Kurs nehmen, solange Sie das Stopp-Niveau vom AKTUELLEN KURS ZUM STOPP-KURS einhalten)

( 'EURUSD - Trends, Prognosen und Konsequenzen' )

extern int      Magic = 77777;
extern int      StopLoss=400;
extern int      TakeProfit=120;
extern double   Lots=0.1;

static int prevtime = 0;
//-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>


//=======================================================
int start()
{
if(Time[0] == prevtime)   return(0);//ждём появления нового бара
   prevtime = Time[0];//если появился новый бар , включаемся
   

//-----------------------------------------------------------------------
if ( NumberOfOrders(NULL,OP_BUYSTOP, Magic)<1 )  {//если нет открытых бай- поз.
if   ( NumberOfPositions(NULL,OP_BUY, Magic)<1)  {//если нет ордеров байстоп
double priceBUY=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,50,0));//-задаем цену
// установки  ордера по максимуму из посл. 50-ти свечей
double SL=0;double TP=0;//выставляем стопы
if( StopLoss>0)   SL= priceBUY-Point* StopLoss;
if( TakeProfit>0) TP= priceBUY+Point* TakeProfit;  
//ставим ордер 
ticket=OrderSend(Symbol(),OP_BUYSTOP, Lots, price,5, SL, TP,"байстоп", Magic,0,Blue);
if( ticket < 0) { Print("Ошибка открытия ордера BUY #", GetLastError()); 
               Sleep(10000);   return (0); }
}}
//--------------------------------------------------------------------------

Аналогично ставится селл-стоп


//----------------------------------------------------------------------------
return (0);
 //-----------------Конец функции int start()----
}//int start()

//--------ставим пользовательские функции -------------

Anstelle von

double priceBUY=..... ....

Ihre Formel eingeben

 

Ich schreibe einen Indikator, die Essenz davon ist wie folgt: wenn eine Kerze ist bullish, ist der Indikator Linie nach oben, bearish unten. gut, Volumen ist all dies hinzugefügt (so dass jede Kerze hat ein Volumen Gewicht). Und die zweite Zeile ist ein gleitender Durchschnitt der aktuellen Zeile

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int average=14;
//---- buffers
double Buf_1[], Buf_2[];
double sum_b;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0, Buf_1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1, Buf_2);
   
   sum_b=0.0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    i, 
          Counted_bars=IndicatorCounted();

int n=0;
//----
//====================================================================
// график тела с объемом

i=Bars- Counted_bars-1;           // Индекс первого непосчитанного
   while( i>=0) 
      {  
       //----
       if (Close[ i]>Open[ i]) {
         sum_b = sum_b + (Close[ i]-Open[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
         }
         
       if (Close[ i]<Open[ i]) {
         sum_b = sum_b - (Open[ i]-Close[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
         }
         
       if (NormalizeDouble(Close[ i],Digits)==NormalizeDouble(Open[ i],Digits)) {
         Buf_1[ i] = Buf_1[ i-1];
         }
       
       // average  
       while( n<= average){
         Buf_2[ i]= Buf_1[ i- n];
         n++;
         }

       i--;
       //----
      }
//====================================================================


//----
   return(0);
  }
//+------------------------------------------------------------------+
Probleme: die Hauptlinie zeichnet Spitzen, wenn ein Doji gebildet wird, und der gleitende Durchschnitt wird nicht gezeichnet?
 
dmmikl86 >> :

Ich schreibe einen Indikator, die Essenz davon ist wie folgt: wenn eine Kerze ist bullish, ist der Indikator Linie nach oben, bearish unten. gut, Volumen ist all dies hinzugefügt (so dass jede Kerze hat ein Volumen Gewicht). Und die zweite Zeile ist der gleitende Durchschnitt der aktuellen Zeile

Probleme: die Hauptlinie zeichnet Spitzen während der Doji-Formation und der gleitende Durchschnitt wird nicht gezeichnet?


Der ifs-Block kann durch eine effizientere Variante ersetzt werden

if (Close[ i]>Open[ i]) {
         sum_b = sum_b + (Close[ i]-Open[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
}
else if (Close[ i]<Open[ i]) {
         sum_b = sum_b - (Open[ i]-Close[ i])*Volume[ i];
         Buf_1[ i]= sum_b;
}
else {  //       if (NormalizeDouble(Close[i],Digits)==NormalizeDouble(Open[i],Digits)) {
         Buf_1[ i] = Buf_1[ i + 1];
}

[i + 1] - da die Index-Arrays von rechts nach links nummeriert sind. Jetzt werden die Candlesticks mit Nullkörpern korrekt verarbeitet.

Bei der mittleren Zeile buf_2 aus dem Code ist es überhaupt nicht klar, was der Autor wollte.


 
OneDepo >> :

Der if-Wert-Block kann durch einen effizienteren Block ersetzt werden

[i + 1] - weil Index-Arrays von rechts nach links nummeriert werden. Jetzt werden die Candlesticks mit Nullkörper korrekt verarbeitet.

Bei der mittleren Zeile buf_2 aus dem Code ist es überhaupt nicht klar, was der Autor wollte.


Sie wollten einen gleitenden Durchschnitt mit einer Periode von 14, basierend auf dem Wert des Indikators

 
dmmikl86 >> :

Es sollte ein gleitender Durchschnitt mit einer Periode von 14 sein, der gegen den Wert des Indikators aufgetragen wird

Dann geht es so:

//+------------------------------------------------------------------+
//|                                                     dmmikl86.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red

extern int BarsCount = 1000;
extern int average=14;

//---- buffers
double Buf_1[], Buf_2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
    if ( average < 1)
        average = 1;

    //---- indicators
    SetIndexStyle(0,DRAW_LINE);
    SetIndexBuffer(0, Buf_1);
    SetIndexStyle(1,DRAW_LINE);
    SetIndexBuffer(1, Buf_2);
    //----
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
    int i, n;

    //====================================================================
    // график тела с объемом
    double s, sum_b = 0;

    int limit = BarsCount;
    if ( limit > Bars)
        limit = Bars;

    for ( i = limit; 0 <= i; i--) {

        if (Close[ i]>Open[ i]) {
            sum_b += (Close[ i]-Open[ i])*Volume[ i];
            Buf_1[ i] = sum_b;
        }
        else if (Close[ i]<Open[ i]) {
            sum_b -= (Open[ i]-Close[ i])*Volume[ i];
            Buf_1[ i] = sum_b;
        }
        else {
            Buf_1[ i] = Buf_1[ i + 1];
        }

        // SMA calculation
        if ( i + average < limit) {
            s = 0;
            for ( n = 0; n < average; n++) {
                s += Buf_1[ i+ n];
            }
            Buf_2[ i] = s/ average;
        }

    }

    return(0);
  }
//+------------------------------------------------------------------+
 
Wie kann ich einmal pro Balken ein Geschäft abschließen und keine weiteren Aufträge auf diesem Balken eröffnen, wenn bereits ein Geschäft auf diesem Balken besteht?
 
Sehen Sie sich nur diesen Thread an.
 
Vinin >> :
Sehen Sie sich nur diesen Thread an.

Oder lesen Sie Aufgabe 27 in Kovalevs Lehrbuch. Es gibt Code-Beispiele und eine ausführliche Erklärung, wie es funktioniert.