Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1096

 
EgorKim:

Ich habe die Zeit und den Preis der Punkte A und B

Woher kenne ich die Zeit und den Preis von Punkt C? Er liegt in der Mitte zwischen A und B.

Ich kann nirgendwo ein Beispiel finden


//+------------------------------------------------------------------+
//| Уравнение прямой                                                 |
//+------------------------------------------------------------------+
double EquationDirect(const int left_bar,const double left_price,const int right_bar,const double right_price,const int bar_to_search) 
  {
   return(right_bar==left_bar ? left_price : (right_price-left_price)/(right_bar-left_bar)*(bar_to_search-left_bar)+left_price);
  }
//+------------------------------------------------------------------+
 
EgorKim:

Ich habe die Zeit und den Preis der Punkte A und B

Woher kenne ich die Zeit und den Preis von Punkt C? Er liegt in der Mitte zwischen A und B.

Ich kann nirgendwo ein Beispiel finden.


Zeit C = Zeit B - ((Zeit B - Zeit A) / 2)

Preis zum Zeitpunkt C

 
Сергей Таболин:

Zeit C = Zeit B - ((Zeit B - Zeit A) / 2)

Preis nach Zeit C

Ich habe es überprüft, manchmal habe ich ein Wochenende)

Gibt es eine Möglichkeit, den Mittelpunkt der Linie selbst zu ermitteln?

Hier ist mein Text

void SetLow(double price_1,double price_2,datetime time_1,datetime time_2)
  {
   ObjectCreate(0,"Low",OBJ_TREND,0,time_2,price_2,time_1,price_1);
   ObjectSetInteger(0,"Low",OBJPROP_COLOR,clrAqua);
   ObjectSetInteger(0,"Low",OBJPROP_WIDTH,2);
   ObjectSetInteger(0,"Low",OBJPROP_STYLE,STYLE_DOT);
   ObjectSetInteger(0,"Low",OBJPROP_BACK,false);
   ObjectSetInteger(0,"Low",OBJPROP_RAY_RIGHT,true);
  }
 
Igor Makanu:

Wie finden Sie das Ticket der zuletzt geöffneten Bestellung heraus? Das funktioniert so nicht:

Was genau wollen Sie wissen? Wir müssen klar zwischen den Begriffen ORDER, ORDNUNG und POSITION unterscheiden.

Zweitens: Sie haben sofort Verwirrung gestiftet, indem Sie die Objekte der CTrade-Klasse "order_1" " "order_2" genannt haben. Früher nannten sie die Objekte der Klasse CTrade "m_trade_1" und "m_trade_2". Das beeinträchtigt zwar nicht die Benutzerfreundlichkeit, sorgt aber für viel Verwirrung.

Drittens: diePositionClose-Methode wird nicht funktionieren, nur weil Sie ihr ein Positionsticket gleich Null übergeben (und Sie initialisieren sie mit Null in OnInit() ) - Solche idealen Bedingungen, bei denen die erste Position ein Ticket "0" hat, können nur im Prüfgerät erreicht werden.

Viertens: DieKaufmethode

Hinweis

Ein erfolgreicher Abschluss der Buy(...)-Methode bedeutet nicht immer eine erfolgreiche Handelsoperation. Man sollte das Ergebnis der Handelsanfrage (Rückgabecode des Handelsservers) durch Aufruf der MethodeResultRetcode() sowieden von der MethodeResultDeal()zurückgegebenen Wertüberprüfen.


MethodeResultDeal()

Ruft das READ-Ticket ab.

 
Vladimir Karputov:

Was genau wollen Sie wissen? Sie müssen klar zwischen den Begriffen ORDER, ORDNUNG und POSITION unterscheiden.

Zweitens haben Sie sofort Verwirrung gestiftet, indem Sie Objekte der Klasse CTrade mit den Worten "order_1" und "order_2" benannt haben. Früher nannten sie die Objekte der Klasse CTrade "m_trade_1" und "m_trade_2". Das beeinträchtigt zwar nicht die Benutzerfreundlichkeit, sorgt aber für viel Verwirrung.

Drittens: diePositionClose-Methode wird nicht funktionieren, nur weil Sie ihr ein Positionsticket gleich Null übergeben (und Sie initialisieren sie mit Null in OnInit() ) - Solche idealen Bedingungen, bei denen die erste Position ein Ticket "0" hat, können nur im Prüfgerät erreicht werden.

Viertens: DieKaufmethode

Hinweis

Ein erfolgreicher Abschluss der Buy(...)-Methode bedeutet nicht immer eine erfolgreiche Handelsoperation. Man sollte das Ergebnis der Handelsanfrage ( Rückgabecode des Handelsservers) durch Aufruf der Methode ResultRetcode() sowieden von der MethodeResultDeal()zurückgegebenen Wertüberprüfen.


MethodeResultDeal()

Ruft das Ticket RECEIVED ab.

Ich danke Ihnen! Ich habe es bereits herausgefunden

Im Allgemeinen lag das Problem in der Fülle von Informationen, Gerüchten und Möglichkeiten.... Ich war mir sicher, dass ich in Result() kein Ticket abfangen kann, da das OnTradeTransaction()-Ereignis hin und wieder erinnert wird ... und es geht los!

Ich arbeite derzeit mit MT5 Tester, ich bin nur auf der Suche nach reproduzierbaren Beispiele, ich bin nicht über den funktionalen Code sprechen - nur ein Tester für jetzt

nochmals vielen Dank für die Hilfe!

dieser Code kann die Tickets der letzten Bestellungen im Tester abrufen:

//+------------------------------------------------------------------+
//|                                                   tst_CTrade.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"

input double Lot_1 = 0.10;
input double Lot_2 = 0.20;
input ulong  Magic1 = 12345;
input ulong  Magic2 = 67890;
#include<Trade\Trade.mqh>
 CTrade order_1,order_2;
ulong   ticket_1,ticket_2;
//_______________________________________________________________________ 
class CNewbar
  {
private:
   datetime          mnewtime;
   ENUM_TIMEFRAMES   mperiod;
public:
                     CNewbar()                        { mperiod=PERIOD_CURRENT;  mnewtime=TimeCurrent(); }
                     CNewbar(ENUM_TIMEFRAMES period)  { mperiod=period;          mnewtime=TimeCurrent(); }
   bool              NewBar(){ datetime t=iTime(NULL,mperiod,0); if(mnewtime<t){ mnewtime=t; return(true); } return(false);  }
  };
//_______________________________________________________________________ 

CNewbar Bar_H1(PERIOD_H1);
CNewbar Bar_M30(PERIOD_M30);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   order_1.SetExpertMagicNumber(Magic1);
   order_2.SetExpertMagicNumber(Magic2);
   ticket_1 = 0;
   ticket_2 = 0;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Bar_H1.NewBar())
     {
      order_1.PositionClose(ticket_1);
      if(order_1.Buy(Lot_1))
        {
         ticket_1=order_1.ResultOrder();
         Print("NewBar H1, ticket_1 = ",ticket_1);
        }
     }

   if(Bar_M30.NewBar())
     {
      order_2.PositionClose(ticket_2);
      if(order_2.Sell(Lot_2))
        {
         ticket_2=order_2.ResultOrder();
         Print("NewBar M30, ticket_2 = ",ticket_2);
        }
     }
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

Ich danke Ihnen! Ich habe es bereits herausgefunden.

Im Allgemeinen lag das Problem in der Fülle von Informationen, Gerüchten und Möglichkeiten.... war mir sicher, dass ich das Ticket nicht in Result() abfangen konnte, weil das OnTradeTransaction()-Ereignis immer mal wieder erinnert wird ... und es geht los!

Ich arbeite derzeit mit MT5 Tester, ich bin nur auf der Suche nach reproduzierbaren Beispiele, ich bin nicht über den funktionalen Code sprechen - nur ein Tester für jetzt

nochmals vielen Dank für Ihre Hilfe!

Ein solcher Code kann die Ticks der letzten Aufträge im Tester abrufen:

Ja, durch die Verwendung von ResultOrder wird das Auftragsticket erhalten.

 
Vladimir Karputov:

Ja, mit ResultOrder können wir ein Ticket für die Bestellung erhalten.

Ok, jetzt habe ich keine Probleme damit, aber ein anderes Problem ist aufgetreten, wenn ich CTrade verwende: Ich habe ein gespeichertes Orderticket und kann es mit PositionClose(m_ticket) schließen

In MQL4 war es ganz einfach: Ich wählte die Bestellung über OrderSelect() aus und prüfte if(OrderCloseTime()>0) - wenn die Abschlusszeit ungleich 0 ist, wird die Bestellung geschlossen

Wie kann ich wissen, ob eine Order mit SB CTrade geschlossen ist?

 
Igor Makanu:

OK, jetzt habe ich keine Probleme damit, aber ein anderes Problem ist aufgetreten, wenn ich CTrade verwende: Ich habe ein gespeichertes Orderticket und kann es mit PositionClose(m_ticket) schließen

In MQL4 war es ganz einfach: Ich wählte die Bestellung über OrderSelect() aus und prüfte if(OrderCloseTime()>0) - wenn die Abschlusszeit ungleich 0 ist, wird die Bestellung geschlossen

Woher weiß ich, dass der Auftrag mit SB CTrade geschlossen ist?

Vergessen Sie den Auftrag! Es gibt eine Stelle!

Ich habe ausdrücklich gefragt, was Sie wollen: eine ORDNUNG, eine ÜBERNAHME ODER eine POSITION? Verwechseln Sie nicht die Terminologie. Nach der Ausführung des Handelsauftrags erscheint die POSITION, nicht der AUFTRAG!


Beschreiben Sie daher zunächst in Worten, was Sie tun und was Sie erreichen wollen. Verwenden Sie anstelle eines ORDERs "BUY trade order" und "SELL trade order". Dies führt zu einer "KAUFEN"- oder "VERKAUFEN"-Position.

 
Igor Makanu:

OK, jetzt habe ich keine Probleme damit, aber ein anderes Problem ist aufgetreten, wenn ich CTrade verwende: Ich habe ein gespeichertes Orderticket und kann es mit PositionClose(m_ticket) schließen

In MQL4 war es ganz einfach: Ich wählte die Bestellung über OrderSelect() aus und prüfte if(OrderCloseTime()>0) - wenn die Abschlusszeit ungleich 0 ist, wird die Bestellung geschlossen

Wie kann ich wissen, ob eine Order mit SB CTrade geschlossen ist?

Abgesehen davon, dass ein Positionsticket in der Regel, aber nicht unbedingt immer, einem Orderticket entspricht, ist es möglich, die Funktion PositionSelectByTicket ohne SB

Документация по MQL5: Торговые функции / PositionSelectByTicket
Документация по MQL5: Торговые функции / PositionSelectByTicket
  • www.mql5.com
Выбирает открытую позицию для дальнейшей работы с ней по указанному тикету. Возвращает true при успешном завершении функции. Возвращает false при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Функция PositionSelectByTicket() копирует данные о позиции в программное окружение, и...
 
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

Kann ich meine eigene Berechnungsformel in den Berechnungscode dieses Indikators einfügen?

Zum Beispiel open/2

Grund der Beschwerde: