Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1829

 
SanAlex #:

in Ihrem Code - hier können Sie die Zahlen ablesen

im Signalindikator - der eine Warnung hat. hier, um mehr Signale zu haben - entfernen Sie ein paar Zeilen


Ich danke Ihnen!
 

Guten Tag!

Ich habe beschlossen, die Eulen etwas komplizierter zu gestalten.

Ich möchte etwas Ähnliches wie Trailing machen, aber mit einer Einzel-/Doppelaktion

Idee:

Der Preis hat 75% des Take überschritten - der Stop wurde (zum Beispiel) um 20 Pips gesenkt und der Take um 20 Pips erhöht.

Der Preis wurde um 90 % an den Take angepasst - der Stop wurde (zum Beispiel) um 30 Pence gesenkt und der Take um 10 Pence erhöht.

Ich sehe das Schema wie folgt (.....function...)=> (TP - Mparametr)

wobei: TP - TakeProfit

Mparametr- eingestellt in externe EA-Variablen (z. B. Anzahl der Punkte)

Welche Funktionen sollten verwendet werden, um dieses Problem zu lösen?

Ich habe von vordefinierten Variablen bid,ask gelesen - sollten wir diese als Basis verwenden?

oder sollten wir MarketInfo oder SymbolInfoTick verwenden?

Ich habe eine ähnliche Lösung, aber die Verschiebung von Stop und Take hängt von vielen Faktoren ab:

  if((iOTy == OP_BUY)&& (LOT()>LotControl))
             {
              dSL = NormalizeDouble(dOOP - StopLoss * Point+DownLoss * Point, Digits);
              dTP = NormalizeDouble(dOOP + TakeProfit * Point+DownProfit * Point, Digits);

              bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0, clrNONE);
             }

Ich möchte etwas Ähnliches machen. relativ einfach.


MarketInfo - Получение рыночной информации - Справочник MQL4
MarketInfo - Получение рыночной информации - Справочник MQL4
  • docs.mql4.com
MarketInfo - Получение рыночной информации - Справочник MQL4
 
Tretyakov Rostyslav #:

Oder so

Ich habe dieses Brett für fast eine Woche geschrieben und hier ist das Problem: wenn ich auch die meisten ausstehenden leveller auf die Schaltfläche in Analogie mit dem Ansatz, der einen Punkt unter, wenn der Preis erreicht wurde, dann aus irgendeinem Grund ohne zu fragen schließt es sofort, ohne Drücken der Taste, die es einen Punkt über (nach dem Drücken und Erreichen einer Ebene, wie in der Theorie Sie benötigen) tun sollte


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  

  
  
  
//--- 
     ObjectCreate(0,"Button_1",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Button_1",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Button_1",OBJPROP_YDISTANCE,120);
   ObjectSetInteger(0,"Button_1",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"Button_1",OBJPROP_YSIZE,20);
   ObjectCreate(0,"Label_1",OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,"Label_1",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Label_1",OBJPROP_YDISTANCE,40);
   ObjectSetInteger(0,"Label_1",OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetString(0,"Label_1",OBJPROP_TEXT,"Price");
   ObjectSetInteger(0,"Label_1",OBJPROP_COLOR,clrBlack);
   
   
   //--- CLOSE BUY +1
   ObjectCreate(0,"Button_21",OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,"Button_21",OBJPROP_XDISTANCE,240);
   ObjectSetInteger(0,"Button_21",OBJPROP_YDISTANCE,120);
   ObjectSetInteger(0,"Button_21",OBJPROP_XSIZE,100);
   ObjectSetInteger(0,"Button_21",OBJPROP_YSIZE,20);
   ObjectSetString(0,"Button_21",OBJPROP_TEXT,"CLOSE BUY +1");
   ObjectSetInteger(0,"Button_21",OBJPROP_BGCOLOR,Beige);
   ObjectSetInteger(0,"Button_21",OBJPROP_COLOR,Green);
   ObjectCreate(0,"Label_21",OBJ_LABEL,0,0,0);
   ObjectSetInteger(0,"Label_21",OBJPROP_XDISTANCE,20);
   ObjectSetInteger(0,"Label_21",OBJPROP_YDISTANCE,40);
   ObjectSetInteger(0,"Label_21",OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,"Label_21",OBJPROP_COLOR,clrBlack);
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(sparam=="Button_1")
     {
      ObjectSetString(0,"Label_1",OBJPROP_TEXT,DoubleToString(Ask-1*_Point,Digits));
      Comment("цена на момент нажатия кнопки: "+Ask, " ждем цены для входа: "+(Ask-1*_Point));
     }
     
        if(sparam=="Button_21")
     {

      ObjectSetString(0,"Label_21",OBJPROP_TEXT,DoubleToString(Bid+1*_Point,Digits));
      ObjectSetText("MSG","цена Bid в момент нажатия кнопки: "+ DoubleToString(Bid,Digits),8,"Verdana", White);
      ObjectSetText("MSG2","ждем цены Bid для закрытия: "+ DoubleToString(Bid+1*_Point,Digits),8,"Verdana", White);

     }
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int ticket;
   double price=StringToDouble(ObjectGetString(0,"Label_1",OBJPROP_TEXT));
   if(Ask<=price)
     {
      ticket = OrderSend(_Symbol,OP_BUY,0.01,Ask,0,0,0,NULL,0,0,clrGreen);
      ObjectSetString(0,"Label_1",OBJPROP_TEXT,DoubleToString(DBL_MAX,Digits));
      ObjectSetInteger(0,"Button_1",OBJPROP_STATE,false);
      Comment("цена ожидания была: "+price, " зашли по: "+Ask, " TakeProfit на: "+(Ask+4*_Point));
     }
     
     
     
       //-----close buy +1

   double priceclosebuyplus1=StringToDouble(ObjectGetString(0,"Label_21",OBJPROP_TEXT));
   if(Bid>=priceclosebuyplus1)
     {

      
      ObjectSetString(0,"Label_21",OBJPROP_TEXT,DoubleToString(DBL_MAX,Digits));
      ObjectSetInteger(0,"Button_21",OBJPROP_STATE,false);
      ObjectSetText("MSG","ожидали цену закрытия Bid: "+DoubleToString(priceclosebuyplus1,Digits),8,"Verdana", White);
      ObjectSetText("MSG2","закрыли по цене Bid: "+ DoubleToString(Bid,Digits),8,"Verdana", White);
      CloseBuyPositions1();
     }
     
     
     
  }
  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL))
              {
               Print("Order Close");
              }
           }

  }

helfen Sie mir

 
Порт-моне тв #:

Wie auch immer, ich habe für fast eine Woche dieses Tableau geschrieben und hier ist das Problem, wenn ich auch die meisten anhängigen Ebene zu einer Art von Schließung auf der Schaltfläche analog auf dem Ansatz, der einen Punkt unter war, wenn der Preis erreicht wird, aus irgendeinem Grund ohne zu fragen automatisch schließt sofort, ohne Drücken der Taste, die es einen Punkt über tun sollte (nach dem Drücken und bei Erreichen einer Ebene wie in der Theorie brauchen)


helfen Sie mir


if(Bid>=priceclosebuyplus1&&priceclosebuyplus1>0)
 
законопослушный гражданин #:

Guten Tag!

Ich habe beschlossen, die Eulen etwas komplizierter zu gestalten.

Ich möchte etwas Ähnliches wie Trailing machen, aber mit einer Einzel-/Doppelaktion

Idee:

Der Preis hat 75% des Take überschritten - der Stop wurde (zum Beispiel) um 20 Pips gesenkt und der Take um 20 Pips erhöht.

Der Preis hat 90% des Take überschritten - der Stop wurde (zum Beispiel) um 30 Pips verringert und der Take um 10 Pips erhöht.


int TakeProfit=200;
int StopLoss  =100;
//+----------------------------------------------------------------------------+
void TrailingOrders()
  {
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.75*_Point) && OrderStopLoss()<OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+20*_Point, OrderTakeProfit()+20*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
               if(Bid >= OrderOpenPrice()+(TakeProfit*0.9*_Point) && OrderStopLoss()>=OrderOpenPrice()-20*_Point)
                 {
                  if(OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss()+30*_Point, OrderTakeProfit()+10*_Point, 0))
                     Print("Модификации ордера на покупку успешна!");
                  else
                     Print("Ошибка модификации ордера на покупку! - ",GetLastError());
                 }
              }
           }
        }
     }
  }
 
Tretyakov Rostyslav #:

Danke, das ist interessant, ich werde versuchen, es herauszufinden!

Es stellt sich heraus, dass, wenn(Bid der Parameter für den aktuellen Preis ist- der in keiner Weise aufgerufen wird - Sie einfach bestimmte Werte mit ihm vergleichen können?

und die Einheit vonBid ist Ticks? (es wird nicht in Geld ausgedrückt)

 
Tretyakov Rostyslav #:


Ich habe nur eine kleine Sorge: Alle Aufträge werden hin und wieder geschlossen (d.h. alle und immer!), aber manchmal, wenn ich 3-4 Aufträge eröffne, werden nur 2 oder 1 von ihnen geschlossen. Ich habe ein spezielles i-check für diesen Zweck, vielleicht können Sie einen Tipp geben.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuyPositions1()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



         if(OrderType()==OP_BUY)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Bid, 0, NULL))
              {
               Print("Order Close");
              }
           }

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSellPositions2()
  {

   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))



         if(OrderType()==OP_SELL)
           {
            if(OrderClose(OrderTicket(), OrderLots(), Ask, 0, NULL))
              {
               Print("Order Close");
              }
           }

  }
//+------------------------------------------------------------------+
 
законопослушный гражданин #:

Danke, das ist interessant, ich werde versuchen, es herauszufinden!

Es stellt sich heraus, dass, wenn(Bid der Parameter für den aktuellen Preis ist- der in keiner Weise aufgerufen wird - Sie einfach bestimmte Werte mit ihm vergleichen können?

und die Einheit vonBid ist Ticks? (es wird nicht in Geld ausgedrückt)

Gebot ist aktueller Preis Vergleichen Sie also mit dem Eröffnungskurs +/- Bedingung

Was die Ticks betrifft, so werden weder Bid noch Ask in Ticks gemessen. Die Ticks stehen für das Eintreffen eines neuen Preises.

 
Tretyakov Rostyslav #:

Gebot ist aktueller Preis also müssen wir ihn mit dem Eröffnungskurs +/- Bedingung vergleichen

Was die Ticks betrifft, so werden weder Bid noch Ask in Ticks gemessen. Die Ticks stehen für das Eintreffen eines neuen Preises.

Verstehe, und woran wird das gemessen? Pips/Pips?

 
законопослушный гражданин #:

Verstehe. Wie wird es dann gemessen? in Punkten/Pips?

MarketInfo(_Symbol,MODE_TICKSIZE);