In OnTick() wird das Drücken der Taste gesteuert. Wenn es im Tester funktioniert - Kontrolle in OnTick(), aber im wirklichen Leben wird dieser Kontrollblock nicht ausgeführt und wird in OnChartEvent() kontrolliert werden
Wie kommt das? An OnTick() werden keine Ereignisparameter übergeben.
Wie kann das sein? An OnTick() werden keine Ereignisparameter übergeben.
Aber der Druck auf den Knopf wird überwacht
if(ObjectGetInteger(0, "name", OBJPROP_STATE) == true)
{
// Делаем что надо по нажатию кнопки и возвращаем прежнее её состояниеObjectSetInteger(0, "name", OBJPROP_STATE, false);
}
Es ist genau das gleiche Steuerelement in OnChartEvent() mit dem Unterschied, dass es nur im Moment des Drückens geprüft wird, nicht bei jedem Tick.
Genau dasselbe Steuerelement in OnChartEvent() mit dem einzigen Unterschied, dass die Prüfung ausnahmsweise im Moment des Klicks und nicht bei jedem Tick erfolgt.
Ist es nicht zum Zeitpunkt der Veröffentlichung? Ein Klick auf ein Objekt wird nur gezählt, wenn Sie innerhalb des Objekts die Taste loslassen. Wenn Sie auf ein Objekt klicken, den Cursor davon wegbewegen, während Sie die Taste gedrückt halten, und sie dann loslassen, ist das Objekt dann angeklickt?
Ist es nicht im Moment des Pressens? Ein Klick auf ein Objekt zählt nur, wenn Sie innerhalb des Objekts drücken und loslassen. Wenn Sie auf ein Objekt klicken, den Cursor davon wegbewegen, während Sie die Taste gedrückt halten, und sie dann loslassen, ist das Objekt dann angeklickt?
Ich habe jedoch noch nicht damit experimentiert.
Ich habe auch keine Experimente gemacht, kann also nichts Genaues sagen. Aber es scheint, als ob es sich um ein Drängen handelt. Es gab sogar einen Thread, in dem dies diskutiert wurde. Wenn ich mich recht erinnere, haben sie sogar darum gebeten, das Ereignis für das Drücken und Loslassen der Maustaste zu trennen.
OnChartEvent() funktioniert in der Testversion nicht.
Bitte zeigen Sie die Schaltfläche, die im Tester funktionieren kann. Klicken Sie z. B. auf die, wird die Flagge Handel = wahr gesetzt; klicken Sie erneut? Handel = falsch;
Ilya Prozumentov:
Wie lässt sich das bewerkstelligen? An OnTick() werden keine Ereignisparameter übergeben.
Zerlegen des Codes des Indikators EquityChartModeller.
Es hat 2 benutzerdefinierte Funktionen:
///////////////////////////////////////////////////////////////////////////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="";
} // Запоминаем фрагмент в массиве; обнуляем фрагмент для след. итерации цикла
}
}
Ich verstehe nicht, wo das gelb hervorgehoben ist. Wenn die Portfolioformel wie folgt aussieht: "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", wie kann dann die Schleife while(p>=0) in if(p==0) umgewandelt werden, wenn sie nur bricht, wenn (X=="+"||X=="-") break; ??
Данный индикатор создан на базе одной из версий известного индикатора Virtual Equity (автор: Xupypr) и был адаптирован для целей портфельного моделирования и парного трейдинга. Индикатор предназначен для быстрого анализа графиков изменения стоимости портфелей/синтетиков непосредственно перед открытием позиций. Есть два основных сценария...
Wie wäre es mit einem Styler? Strg+, (Komma auf Englisch)
Ich will nicht auf Ihnen herumhacken. Es ist nur so, dass Sie derjenige sind, der Hilfe braucht, also liegt es an Ihnen, die Informationen in einer brauchbaren Form weiterzugeben, und nicht in einem Müllhaufen.
In OnTick() wird das Drücken der Taste gesteuert. Wenn es im Tester funktioniert - Kontrolle in OnTick(), aber im wirklichen Leben wird dieser Kontrollblock nicht ausgeführt und wird in OnChartEvent() kontrolliert werden
Wie kommt das? An OnTick() werden keine Ereignisparameter übergeben.
Wie kann das sein? An OnTick() werden keine Ereignisparameter übergeben.
Aber der Druck auf den Knopf wird überwacht
Es ist genau das gleiche Steuerelement in OnChartEvent() mit dem Unterschied, dass es nur im Moment des Drückens geprüft wird, nicht bei jedem Tick.Aber das Drücken der Taste wird kontrolliert
Genau dasselbe Steuerelement in OnChartEvent() mit dem einzigen Unterschied, dass die Prüfung ausnahmsweise im Moment des Klicks und nicht bei jedem Tick erfolgt.Ist es nicht zum Zeitpunkt der Veröffentlichung? Ein Klick auf ein Objekt wird nur gezählt, wenn Sie innerhalb des Objekts die Taste loslassen. Wenn Sie auf ein Objekt klicken, den Cursor davon wegbewegen, während Sie die Taste gedrückt halten, und sie dann loslassen, ist das Objekt dann angeklickt?
Ich habe jedoch noch nicht damit experimentiert.
Ist es nicht im Moment des Pressens? Ein Klick auf ein Objekt zählt nur, wenn Sie innerhalb des Objekts drücken und loslassen. Wenn Sie auf ein Objekt klicken, den Cursor davon wegbewegen, während Sie die Taste gedrückt halten, und sie dann loslassen, ist das Objekt dann angeklickt?
Ich habe jedoch noch nicht damit experimentiert.
Ich habe auch keine Experimente gemacht, kann also nichts Genaues sagen. Aber es scheint, als ob es sich um ein Drängen handelt. Es gab sogar einen Thread, in dem dies diskutiert wurde. Wenn ich mich recht erinnere, haben sie sogar darum gebeten, das Ereignis für das Drücken und Loslassen der Maustaste zu trennen.
OnChartEvent() funktioniert in der Testversion nicht.
Bitte zeigen Sie die Schaltfläche, die im Tester funktionieren kann. Klicken Sie z. B. auf die, wird die Flagge Handel = wahr gesetzt; klicken Sie erneut? Handel = falsch;
Wie lässt sich das bewerkstelligen? An OnTick() werden keine Ereignisparameter übergeben.
https://www.mql5.com/ru/forum/171668#comment_10574757
Zerlegen des Codes des Indikators EquityChartModeller.
Es hat 2 benutzerdefinierte Funktionen:
Ich verstehe nicht, wo das gelb hervorgehoben ist. Wenn die Portfolioformel wie folgt aussieht: "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", wie kann dann die Schleife while(p>=0) in if(p==0) umgewandelt werden, wenn sie nur bricht, wenn (X=="+"||X=="-") break; ??
Und dann unten, if(p==0) , warum wird das Los auf 1 gesetzt -Lots[Total-1]=1; ?
Indikator hier: https://www.mql5.com/ru/code/10962
Zerlegen des Codes des Indikators EquityChartModeller.
Es hat 2 benutzerdefinierte Funktionen:
...Indikator hier: https://www.mql5.com/ru/code/10962
Code korrekteinfügen:
Fügen Sie den Code korrektein:
korrigiert
korrigiert
Wie wäre es mit einem Styler? Strg+, (Komma auf Englisch)
Ich will nicht auf Ihnen herumhacken. Es ist nur so, dass Sie derjenige sind, der Hilfe braucht, also liegt es an Ihnen, die Informationen in einer brauchbaren Form weiterzugeben, und nicht in einem Müllhaufen.