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

 

Leute, bitte helft mir. Ich möchte eine Funktion schreiben, die dafür sorgt, dass jeder nächste offene Auftrag mit einem Los eröffnet wird, das 2 Mal größer ist als das vorherige. Diese Funktion gibt falsche Werte aus... Was ist daran falsch? Vielen Dank im Voraus!



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}

 
Trader7777:

Leute, helft bitte. Ich möchte eine Funktion schreiben, die dafür sorgt, dass jeder nächste offene Auftrag mit einem Los eröffnet wird, das 2 Mal größer ist als das vorherige. Diese Funktion gibt falsche Werte aus... Was ist daran falsch? Vielen Dank im Voraus!



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}


Für den Anfang:

extern double LotBuy = 0.01;

double GetLotBuy()

{
double ld_Lot = LotBuy;
for(int n = 1; n<=CountBuy(); n++)
{ld_Lot = LotBuy * n * 2;}
return (ld_Lot);
}

 
Trader7777:

Leute, bitte helft mir. Ich möchte eine Funktion schreiben, die dafür sorgt, dass jeder nächste offene Auftrag mit einem Lot eröffnet wird, das 2 Mal so hoch ist wie das vorherige. Diese Funktion gibt falsche Werte aus... Was ist daran falsch? Vielen Dank im Voraus!



extern double LotBuy = 0.01;


double GetLotBuy()

{

for(int n = 1; n<=CountBuy(); n++)
{
LotBuy=LotBuy*2;
}
return (LotBuy);
}

Versuchen Sie dies.

double OrderLotsSB(string sy="", int op=-1, int mn=-1) { 
 datetime o;
   int      i, k=OrdersTotal(); double r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if ( OrderType()==OP_SELL||OrderType()==OP_BUY) {
          if (op<0 || OrderType()==OP_SELL||OrderType()==OP_BUY) {
            if (mn<0 || OrderMagicNumber()==Magic) {
              r=OrderLots()*2;
            }
          }
        }
      }
    }
  }
  return(r);
}
 
TarasBY:

Für den Anfang:

extern double LotBuy = 0.01;

double GetLotBuy()

{
double ld_Lot = LotBuy;
for(int n = 1; n<=CountBuy(); n++)
{ld_Lot = LotBuy * n * 2;}
return (ld_Lot);
}



Wollen Sie mich auf den Arm nehmen?
 

Ich habe einen EA auf der Grundlage meines eigenen Indikators erstellt.

Eröffnungsgeschäfte kaufen bei einem Anstieg und verkaufen bei einem Rückgang des Indikators im Vergleich zu gestern.

Das Problem besteht darin, dass der Handel über einen Balken oder mehr geöffnet und geschlossen wird.

Der Indikator ist so eingestellt, dass er die Bewegungen auf einen bestimmten Sollwert ignoriert.

Wenn es keinen Überschuss gibt, bleibt der Indikatorwert wie im vorherigen Balken (ich denke, das Problem liegt hier irgendwo)

Indikator-Code:

//+------------------------------------------------------------------+
//|                                                         EMAF.mq4 |
//|                                                 Kamil Gazizullin |
//|                                             forexman77@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Kamil Gazizullin"
#property link      "forexman77@yandex.ru"
#property indicator_chart_window
#property indicator_buffers 1
#property  indicator_color1 Red
//--- input parameters
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),                      
    limit;
    double
    raznica,raznica_static,
    MA_1_t,                                                  
    MA_2_t;
 
   if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars;
   for(int i=0;i<limit;i++)
   {  
      static double MA_otshet;
      MA_1_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+0);  
      MA_2_t=iMA(NULL,0,7,0,MODE_EMA,PRICE_CLOSE,i+1); 
      raznica=MA_1_t-MA_2_t;
      raznica_static=MA_1_t-MA_otshet;
      if(raznica_static > -0.003 && raznica_static < 0.003)
      {
      ExtMapBuffer1[i]=MA_otshet;
      }
      else
      if(raznica > -0.003 && raznica < 0.003)
      {
      ExtMapBuffer1[i]=MA_2_t;
      MA_otshet=MA_2_t;
      }
      if((raznica > 0.003) || (raznica <- 0.003))
      {
      ExtMapBuffer1[i]=MA_1_t;
      }
   }
   return(0);
  }
//+------------------------------------------------------------------+

EA-Handelskriterien:

   // Торговые критерии
EMAF_1=iCustom(NULL, 0, "EMAF",0,0,i+0);    
EMAF_2=iCustom(NULL, 0, "EMAF",0,0,i+1); 
static datetime t;
if  (EMAF_1 > EMAF_2)
          {                                          
          Opn_B=true; 
          t=Time[0];                  
          }
if  (EMAF_1 < EMAF_2)
      {
       if(Time[0]>t)
          {                                      
          Cls_B=true;              
          }
      }
 
klop:
Hallo!

Ein Skript wie dieses wird benötigt:

war
eur/gbp / 1 lot / open 312,25 / sl 559,45 / tp 454,55
yui/ghf / 1 lot / open 3.28 / sl 5.65 / tp 4.65
.../... / 1 Los / offen ...... / sl ...... / tp .......


wurde
eur/gbp / 1,02 lot / open 312,25 / sl 559,45 / tp 454,55
yui/ghf / 1,02 lot / open 3,28 / sl 5,65 / tp 4,65
.../... / 1.02 lot / open ...... / sl ...... / tp .......

Was würde schwebende Aufträge mit einem bestimmten Volumen (Lot) schließen und einen neuen Auftrag mit einem anderen Volumen, aber demselben Einstiegslevel, Stop und Take eröffnen.

Ich weiß es nicht... Vielleicht hat jemand.
Wenn Sie auf der Suche nach einem Skript mit einer solchen Funktion sind, können Sie eine Suchmaschine auf dieser Website verwenden.
 
max020780:



Ich verstehe hier gar nichts...


Ich möchte, dass sich die Losgröße geometrisch erhöht (mit einem Multiplikator von 2), wenn ein zweiter unidirektionaler Auftrag eröffnet wird.

 
Vinin:

Soll das ein Witz sein?
Die Lösung besteht nicht selten aus mehreren "Schritten". Der erste Schritt besteht darin, das exponentielle Wachstum der Losgröße zu verringern. Auf diesem Weg geben wir der Verwendung des Zyklus zumindest eine gewisse Bedeutung. Und da wir nicht wissen, "wo der Anfang" ist, sind die weiteren Schritte dem Autor überlassen. ;)
 
TarasBY:
Die Lösung besteht nicht selten aus mehreren "Schritten". Der erste Schritt besteht darin, das exponentielle Wachstum der Losgröße zu verringern. Gleichzeitig geben wir der Verwendung des Zyklus zumindest eine gewisse Bedeutung. Und da wir nicht wissen, "wo der Anfang" ist, sind die weiteren Schritte dem Autor überlassen. ;)

Das ist natürlich wunderbar, aber wie drückt man aus, dass man den nächsten Auftrag in einer Richtung mit einer doppelt so großen Menge wie der vorherigen eröffnet? Es gibt bereits zwei funktionierende Funktionen CountBuy() und CountSell()
 
Trader7777:
Was hindert Sie daran, eine solche Prüfung (Skript) durchzuführen?
Dateien: