Questions des débutants MQL5 MT5 MetaTrader 5 - page 1210

 
MQL_User:

Je ne pensais pas rencontrer un tel problème, car à première vue, il devrait être facile de redessiner le graphique à partir du programme. Dans ce contexte, l'objectif de la fonction ChartRedraw() n'est pas clair...

Il ne s'agit pas d'indicateurs, mais d'afficher les modifications apportées aux propriétés des objets graphiques.

Vous devez envoyer un tick à l'indicateur - alors l'indicateur sera redessiné. Bien, c'est-à-dire qu'il fera ce qu'il doit faire sur le nouveau tic.

Et pour envoyer un nouveau tick, vous devez soit l'attendre, ce qui n'est pas une option, soit rafraîchir le graphique par PCM --> Refresh, ce qui n'est pas non plus une option, soit utiliser la fonction ChartSetSymbolPeriod() avec ces paramètres pour le graphique actuel :

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


Bonjour, aidez-moi, j'ai écrit un script qui ouvre un ordre limite mais au prix du marché. Tout fonctionne, j'ai décidé de le modifier pour mettre une limite en dessous/au-dessus du marché, rien ne fonctionne, bien que le code de retour du serveur de trading 10009, et GetLastError() renvoie 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);
            }
si request.price par exemple met : Ask-Point()*30 ne le fixe pas, la normalisation du prix ne donne rien non plus
 
Artem, que pouvez-vous dire, à la question ci-dessus, opinion intéressante. comme une expérience d'apprentissage.
 
Artyom Trishkin:

Il ne s'agit pas d'indicateurs, mais de montrer les modifications apportées aux propriétés des objets graphiques.

Vous devez envoyer un tick à l'indicateur - puis l'indicateur se redessinera. C'est-à-dire qu'il fera ce qu'il doit faire sur le nouveau tic.

Pour envoyer un nouveau tick, vous devez soit l'attendre, ce qui n'est pas une option, soit rafraîchir le graphique en utilisant PKM --> Refresh, ce qui n'est pas non plus une option, soit utiliser ChartSetSymbolPeriod() avec ces paramètres pour le graphique actuel :

Artem, merci.

Tout fonctionne. :)

 
Quelqu'un sait-il comment désactiver l'affichage de tous les indicateurs utilisés dans l'EA sur le graphique pendant les tests visuels?
 
Сергей Таболин:
Quelqu'un sait-il comment désactiver l'affichage de tous les indicateurs utilisés dans l'EA sur le graphique pendant le test visuel?

TesterHideIndicators(true) ;

 

Comment puis-je savoir si l'indicateur n'est pas prêt à fonctionner avec un autre cadre temporel ?

L'historique n'est pas paginé (non construit) pour les périodes adjacentes. L'indicateur fonctionne sur M15, mais j'ai besoin de regarder sur H1 (en haut du graphique M15), quand je le change - le graphique est vide. Quand je rafraîchis dans quelques secondes - beauté, tous les tampons sont rendus.

Comment puis-je faire en sorte que l'indicateur vérifie l'historique sur un autre horizon temporel et maintienne le calcul jusqu'à ce qu'il apparaisse ?

 
Igor Zakharov:

TesterHideIndicators(true) ;

Merci beaucoup ))))

 

Je ne peux pas obtenir les valeurs ATP d'une autre période :

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

à partir du cadre temporel actuel - fonctionne. à partir de cadres temporels plus anciens - toujours 0

 

Sur les contrats à terme, comment créer un contrat continu ? pour l'analyse des graphiques techniques ?