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

 
MQL_User:

Ich hätte nicht gedacht, dass ich auf ein solches Problem stoßen würde, denn auf den ersten Blick sollte es eine Selbstverständlichkeit sein, das Diagramm vom Programm aus neu zu zeichnen. Vor diesem Hintergrund ist der Zweck der Funktion ChartRedraw() unklar...

Sie dient nicht zur Anzeige von Indikatoren, sondern zur Darstellung von Änderungen an den Eigenschaften grafischer Objekte.

Sie müssen einen Tick an den Indikator senden - dann wird der Indikator neu gezeichnet. Nun, das heißt, es wird das tun, was es auf dem neuen Tick tun sollte.

Und um einen neuen Tick zu senden, müssen Sie entweder darauf warten, was nicht möglich ist, oder den Chart mit PCM --> Refresh aktualisieren, was ebenfalls nicht möglich ist, oder die Funktion ChartSetSymbolPeriod() mit solchen Parametern für den aktuellen Chart verwenden:

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
  • www.mql5.com
Меняет значения символа и периода указанного графика. Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы...
 


Hallo, helfen Sie mir, ich habe ein Skript geschrieben, das eine Limit-Order öffnet, aber zum Marktpreis. Alles funktioniert, beschlossen, es zu ändern, um ein Limit unter/über dem Markt, nichts funktioniert, obwohl der Return-Code des Handels-Server 10009, und GetLastError() gibt 0. Code:

void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=NormalizeDouble(ChartPriceOnDropped()*0.1,digits)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =Ask;                                    // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
wenn request.price zum Beispiel put: Ask-Point()*30 nicht setzt, bringt auch die Preisnormalisierung nichts
 
Artem, was können Sie zu der obigen Frage sagen, interessante Meinung. als eine Lernerfahrung.
 
Artyom Trishkin:

Dies ist nicht für Indikatoren gedacht, sondern um Änderungen an den Eigenschaften von grafischen Objekten anzuzeigen.

Sie müssen einen Tick an den Indikator senden - dann wird der Indikator neu gezeichnet. Das heißt, sie wird das tun, was sie auf dem neuen Tick tun sollte.

Um einen neuen Tick zu senden, müssen Sie entweder darauf warten, was keine Option ist, oder den Chart mit PKM --> Refresh aktualisieren, was ebenfalls keine Option ist, oder ChartSetSymbolPeriod() mit diesen Parametern für den aktuellen Chart verwenden:

Artem, ich danke dir.

Es funktioniert alles. :)

 
Weiß jemand, wie man die Anzeige aller im EA verwendeten Indikatoren im Diagramm während des visuellen Tests deaktivieren kann?
 
Сергей Таболин:
Weiß jemand, wie man die Anzeige aller im EA verwendeten Indikatoren auf dem Diagramm während des visuellen Tests deaktivieren kann?

TesterHideIndicators(true);

 

Woran erkenne ich, dass der Indikator nicht bereit ist, mit einem anderen Zeitrahmen zu arbeiten?

Die Historie wird für benachbarte Zeiträume nicht durchgeblättert (nicht erstellt). Der Indikator funktioniert auf M15, aber ich muss auf H1 (oben auf dem M15-Diagramm) schauen, wenn ich es umschalte - das Diagramm ist leer. Wenn ich in ein paar Sekunden aktualisiere - Schönheit, werden alle Puffer gerendert.

Wie kann ich den Indikator dazu bringen, die Historie in einem anderen Zeitrahmen zu prüfen und die Berechnung zu halten, bis sie erscheint?

 
Igor Zakharov:

TesterHideIndicators(true);

Herzlichen Dank ))))

 

Ich kann keine ATP-Werte aus einem anderen Zeitrahmen erhalten:

ATR_handle=iATR(_Symbol,ATR_TF,ATR_Period);
CopyBuffer(ATR_handle,0,time[i],1,ATR);

aus dem aktuellen Zeitrahmen - funktioniert. aus älteren Zeitrahmen - immer 0

 

Wie erstellt man bei Futures einen fortlaufenden Kontrakt? für die technische Chartanalyse?

Grund der Beschwerde: