Dans OnTick(), contrôlez l'appui sur le bouton. Si cela fonctionne dans le testeur - contrôle dans OnTick(), mais dans la vie réelle ce bloc de contrôle ne sera pas exécuté et sera contrôlé dans OnChartEvent()
Comment cela se fait-il ? Aucun paramètre d'événement n'est passé à OnTick().
Comment est-ce possible ? Aucun paramètre d'événement n'est passé à OnTick().
Mais la pression du bouton est contrôlée
if(ObjectGetInteger(0, "name", OBJPROP_STATE) == true)
{
// Делаем что надо по нажатию кнопки и возвращаем прежнее её состояниеObjectSetInteger(0, "name", OBJPROP_STATE, false);
}
C'est exactement le même contrôle dans OnChartEvent() avec la différence qu'il n'est vérifié qu'au moment de l'appui, et non à chaque tick.
Exactement le même contrôle dans OnChartEvent() avec la seule différence que le contrôle a lieu exclusivement au moment du clic, et non à chaque tick.
N'est-ce pas au moment de la sortie ? Le fait de cliquer sur un objet n'est comptabilisé que si vous appuyez sur le bouton de relâchement à l'intérieur de l'objet. Si vous cliquez sur un objet, éloignez le curseur de celui-ci tout en maintenant le bouton enfoncé, puis le relâchez, l'objet est-il cliqué ?
N'est-ce pas au moment du pressage ? Le fait de cliquer sur un objet ne compte que si vous appuyez et relâchez dans l'objet. Si vous cliquez sur un objet, éloignez le curseur de celui-ci tout en maintenant le bouton enfoncé, puis le relâchez, l'objet est-il cliqué ?
Cependant, je n'ai pas encore expérimenté.
Je n'ai pas non plus fait d'expérience, donc je ne peux rien affirmer avec certitude. Mais il semble que ce soit en poussant. Il y avait même un fil de discussion quelque part à ce sujet. Si ma mémoire est bonne, il semble qu'ils aient même demandé de séparer l'événement pour l'appui et le relâchement du bouton de la souris.
Veuillez montrer le bouton qui peut fonctionner dans le testeur. Par exemple, cliquez sur lequel, le drapeau trade = true sera levé ; cliquez à nouveau ? trade = false ;
Ilya Prozumentov:
Comment cela peut-il être fait ? Aucun paramètre d'événement n'est passé à OnTick().
Démontage du code de l'indicateur EquityChartModeller.
Il dispose de 2 fonctions personnalisées :
///////////////////////////////////////////////////////////////////////////void SetPositions(string name,int number) // 69 SetPositions(Portfolio_Formula_A,1)
{
BlocksLastN=BlocksTotal; //
SeparateBlocks(name); // Разбиваем строку на блокиfor(int i=BlocksLastN;i<BlocksTotal;i++) // Перебираем блоки формулы
{
Total++; // Увеличиваем кол-во инструментов ++;ArrayResize(Lots,Total); // Устанавливаем размер массива Lots размером Total;ArrayResize(Instrument,Total); // Устанавливаем размер массива Instrument размером Total;ArrayResize(OpenPrice,Total); // Устанавливаем размер массива OpenPrice размером Total;ArrayResize(ClosePrice,Total); // Устанавливаем размер массива ClosePrice размером Total;ArrayResize(Index,Total); // Устанавливаем размер массива Index размером Total;int length=StringLen(Block[i]); // Определяем кол-во символов в блоке;int p=length-1; // Для перебора создаем переменную меньше на единицу;while(p>=0) // До тех пор пока есть символ
{
string X=StringSubstr(Block[i],p,1); // определяем символ;if(X=="+"||X=="-") break; // если дошли до знака то прекращаем;if(p==0) break; // Если дошли до первого символа то прекращаем;else p--; // Иначе переходим к следующему символу
}
Index[Total-1]=number;
Instrument[Total-1]=StringSubstr(Block[i],0,p); // Запоминаем элемент массива Instrument - название инструмента;if(p==0) Lots[Total-1]=1;else Lots[Total-1]=StrToDouble(StringSubstr(Block[i],p,length-p)); // Запоминаем элемент массива Lots - направление и размер лота;if(MarketInfo(Instrument[Total-1],MODE_POINT)==0) // Если размера пункта инструмента нет
{Missing=StringConcatenate(Missing," ",Instrument[Total-1]);Error=true;} // Запоминаем потерявшийся инструмент "Название инструмента ERROR"
}
}
/////////////////////////////////////////////////////////////////////////// // Функция разбиения строки формулы на блокиvoid SeparateBlocks(string text) // 218 SeparateBlocks(name);
{
string fragment=""; // инструмент с направлением и лотом (до порбела)int length=StringLen(text); // Возвращает число символов в строке (Portfolio_Formula_A)for(int position=0;position<length;position++) // Перебор символов строки
{
int sym=StringGetChar(text,position); // Возвращает значение символа, расположенного в указанной позиции строкиif(sym!=32&&sym!=9&&sym!=10&&sym!=13) fragment=fragment+StringSubstr(text,position,1); // Если не пробел, не таб, не перевод строки, не возврат каретки - добавляем символ фрагментуif(sym==32||sym==9||sym==10||sym==13||position==length-1) // Если пробел или таб или перевод строки или возврат каретки или последний символ строки формулыif(StringLen(fragment)>0) // Если у фрагмента есть символы
{
BlocksTotal++;ArrayResize(Block,BlocksTotal); // Кол-во блоков++; Изменяем размер массива Block;
Block[BlocksTotal-1]=fragment;fragment="";
} // Запоминаем фрагмент в массиве; обнуляем фрагмент для след. итерации цикла
}
}
Je ne comprends pas où c'est surligné en jaune. Si la formule du portefeuille ressemble à : "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", alors comment la boucle while(p>=0) peut-elle être remplacée par if(p==0) si elle ne casse que if(X=="+"||X=="-") break ; ? ?
Данный индикатор создан на базе одной из версий известного индикатора Virtual Equity (автор: Xupypr) и был адаптирован для целей портфельного моделирования и парного трейдинга. Индикатор предназначен для быстрого анализа графиков изменения стоимости портфелей/синтетиков непосредственно перед открытием позиций. Есть два основных сценария...
Je ne m'en prends pas à vous. C'est juste que c'est vous qui avez besoin d'aide, donc c'est à vous de donner l'information sous une forme utilisable, pas un dépotoir.
Dans OnTick(), contrôlez l'appui sur le bouton. Si cela fonctionne dans le testeur - contrôle dans OnTick(), mais dans la vie réelle ce bloc de contrôle ne sera pas exécuté et sera contrôlé dans OnChartEvent()
Comment cela se fait-il ? Aucun paramètre d'événement n'est passé à OnTick().
Comment est-ce possible ? Aucun paramètre d'événement n'est passé à OnTick().
Mais la pression du bouton est contrôlée
C'est exactement le même contrôle dans OnChartEvent() avec la différence qu'il n'est vérifié qu'au moment de l'appui, et non à chaque tick.Mais appuyer sur le bouton est contrôlé
Exactement le même contrôle dans OnChartEvent() avec la seule différence que le contrôle a lieu exclusivement au moment du clic, et non à chaque tick.N'est-ce pas au moment de la sortie ? Le fait de cliquer sur un objet n'est comptabilisé que si vous appuyez sur le bouton de relâchement à l'intérieur de l'objet. Si vous cliquez sur un objet, éloignez le curseur de celui-ci tout en maintenant le bouton enfoncé, puis le relâchez, l'objet est-il cliqué ?
Cependant, je n'ai pas encore expérimenté.
N'est-ce pas au moment du pressage ? Le fait de cliquer sur un objet ne compte que si vous appuyez et relâchez dans l'objet. Si vous cliquez sur un objet, éloignez le curseur de celui-ci tout en maintenant le bouton enfoncé, puis le relâchez, l'objet est-il cliqué ?
Cependant, je n'ai pas encore expérimenté.
Je n'ai pas non plus fait d'expérience, donc je ne peux rien affirmer avec certitude. Mais il semble que ce soit en poussant. Il y avait même un fil de discussion quelque part à ce sujet. Si ma mémoire est bonne, il semble qu'ils aient même demandé de séparer l'événement pour l'appui et le relâchement du bouton de la souris.
OnChartEvent() ne fonctionne pas dans le testeur.
Veuillez montrer le bouton qui peut fonctionner dans le testeur. Par exemple, cliquez sur lequel, le drapeau trade = true sera levé ; cliquez à nouveau ? trade = false ;
Comment cela peut-il être fait ? Aucun paramètre d'événement n'est passé à OnTick().
https://www.mql5.com/ru/forum/171668#comment_10574757
Démontage du code de l'indicateur EquityChartModeller.
Il dispose de 2 fonctions personnalisées :
Je ne comprends pas où c'est surligné en jaune. Si la formule du portefeuille ressemble à : "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", alors comment la boucle while(p>=0) peut-elle être remplacée par if(p==0) si elle ne casse que if(X=="+"||X=="-") break ; ? ?
Et ensuite, ci-dessous, if(p==0) , pourquoi le lot est-il fixé à 1 -Lots[Total-1]=1 ;? ??
Indicateur ici : https://www.mql5.com/ru/code/10962
Démontage du code de l'indicateur EquityChartModeller.
Il dispose de 2 fonctions personnalisées :
...Indicateur ici : https://www.mql5.com/ru/code/10962
Insérez le code correctement :
Insérez le code correctement :
corrigé
corrigé
Et un styler? Ctrl+, (virgule en anglais)
Je ne m'en prends pas à vous. C'est juste que c'est vous qui avez besoin d'aide, donc c'est à vous de donner l'information sous une forme utilisable, pas un dépotoir.