In OnTick() controlla la pressione del pulsante. Se funziona nel tester - controllo in OnTick(), ma nella vita reale questo blocco di controllo non sarà eseguito e sarà controllato in OnChartEvent()
Come mai? Nessun parametro dell'evento viene passato a OnTick().
Come può essere? Nessun parametro dell'evento viene passato a OnTick().
Ma la pressione del pulsante è monitorata
if(ObjectGetInteger(0, "name", OBJPROP_STATE) == true)
{
// Делаем что надо по нажатию кнопки и возвращаем прежнее её состояниеObjectSetInteger(0, "name", OBJPROP_STATE, false);
}
È esattamente lo stesso controllo in OnChartEvent() con la differenza che viene controllato solo al momento della pressione, non ad ogni tick.
Esattamente lo stesso controllo in OnChartEvent() con l'unica differenza che il controllo avviene eccezionalmente al momento del click, non ad ogni tick.
Non è al momento del rilascio? Il clic su un oggetto viene contato solo se si preme-rilascia all'interno dell'oggetto. Se clicchi su un oggetto, allontani il cursore da esso tenendo premuto il pulsante e poi lo rilasci, l'oggetto è cliccato?
Non è al momento di premere? Cliccare su un oggetto conta solo se si preme e si rilascia all'interno dell'oggetto. Se clicchi su un oggetto, allontani il cursore da esso tenendo premuto il pulsante e poi lo rilasci, l'oggetto è cliccato?
Tuttavia, non ho ancora sperimentato.
Nemmeno io ho sperimentato, quindi non posso dire nulla con certezza. Ma sembra che sia spingendo. C'era anche un thread da qualche parte che ne discuteva. Se la memoria non mi inganna, sembra che abbiano anche chiesto di separare l'evento per la pressione e il rilascio del pulsante del mouse.
Si prega di mostrare il pulsante che può funzionare nel tester. Per esempio, cliccate su quale, la bandiera trade = true sarà sollevata; cliccate di nuovo? trade = false;
Ilya Prozumentov:
Come si può fare? Nessun parametro dell'evento viene passato a OnTick().
Smontare il codice dell'indicatore EquityChartModeller.
Ha 2 funzioni personalizzate:
///////////////////////////////////////////////////////////////////////////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="";
} // Запоминаем фрагмент в массиве; обнуляем фрагмент для след. итерации цикла
}
}
Non capisco dove è evidenziato in giallo. Se la formula del portafoglio assomiglia a: "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", allora come può il ciclo while(p>=0) essere sovrascritto a if(p==0) se interrompe solo if(X=="+"||X=="-") break; ?
Данный индикатор создан на базе одной из версий известного индикатора Virtual Equity (автор: Xupypr) и был адаптирован для целей портфельного моделирования и парного трейдинга. Индикатор предназначен для быстрого анализа графиков изменения стоимости портфелей/синтетиков непосредственно перед открытием позиций. Есть два основных сценария...
Che ne dici di uno styler? Ctrl+, (virgola in inglese)
Non me la prendo con te. È solo che sei tu quello che ha bisogno di aiuto, quindi sta a te dare le informazioni in una forma utilizzabile, non una discarica.
In OnTick() controlla la pressione del pulsante. Se funziona nel tester - controllo in OnTick(), ma nella vita reale questo blocco di controllo non sarà eseguito e sarà controllato in OnChartEvent()
Come mai? Nessun parametro dell'evento viene passato a OnTick().
Come può essere? Nessun parametro dell'evento viene passato a OnTick().
Ma la pressione del pulsante è monitorata
È esattamente lo stesso controllo in OnChartEvent() con la differenza che viene controllato solo al momento della pressione, non ad ogni tick.Ma la pressione del pulsante è controllata
Esattamente lo stesso controllo in OnChartEvent() con l'unica differenza che il controllo avviene eccezionalmente al momento del click, non ad ogni tick.Non è al momento del rilascio? Il clic su un oggetto viene contato solo se si preme-rilascia all'interno dell'oggetto. Se clicchi su un oggetto, allontani il cursore da esso tenendo premuto il pulsante e poi lo rilasci, l'oggetto è cliccato?
Tuttavia, non ho ancora sperimentato.
Non è al momento di premere? Cliccare su un oggetto conta solo se si preme e si rilascia all'interno dell'oggetto. Se clicchi su un oggetto, allontani il cursore da esso tenendo premuto il pulsante e poi lo rilasci, l'oggetto è cliccato?
Tuttavia, non ho ancora sperimentato.
Nemmeno io ho sperimentato, quindi non posso dire nulla con certezza. Ma sembra che sia spingendo. C'era anche un thread da qualche parte che ne discuteva. Se la memoria non mi inganna, sembra che abbiano anche chiesto di separare l'evento per la pressione e il rilascio del pulsante del mouse.
OnChartEvent() non funziona nel tester.
Si prega di mostrare il pulsante che può funzionare nel tester. Per esempio, cliccate su quale, la bandiera trade = true sarà sollevata; cliccate di nuovo? trade = false;
Come si può fare? Nessun parametro dell'evento viene passato a OnTick().
https://www.mql5.com/ru/forum/171668#comment_10574757
Smontare il codice dell'indicatore EquityChartModeller.
Ha 2 funzioni personalizzate:
Non capisco dove è evidenziato in giallo. Se la formula del portafoglio assomiglia a: "USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2", allora come può il ciclo while(p>=0) essere sovrascritto a if(p==0) se interrompe solo if(X=="+"||X=="-") break; ?
E poi sotto, if(p==0) , perché il lotto è impostato a 1 -Lots[Total-1]=1; ?
Indicatore qui: https://www.mql5.com/ru/code/10962
Smontare il codice dell'indicatore EquityChartModeller.
Ha 2 funzioni personalizzate:
...Indicatore qui: https://www.mql5.com/ru/code/10962
Inserire il codice correttamente:
Inserire il codice correttamente:
corretto
corretto
Che ne dici di uno styler? Ctrl+, (virgola in inglese)
Non me la prendo con te. È solo che sei tu quello che ha bisogno di aiuto, quindi sta a te dare le informazioni in una forma utilizzabile, non una discarica.