if(ObjectGetInteger(0, "name", OBJPROP_STATE) == true)
{
// Делаем что надо по нажатию кнопки и возвращаем прежнее её состояниеObjectSetInteger(0, "name", OBJPROP_STATE, false);
}
///////////////////////////////////////////////////////////////////////////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="";
} // Запоминаем фрагмент в массиве; обнуляем фрагмент для след. итерации цикла
}
}
Данный индикатор создан на базе одной из версий известного индикатора Virtual Equity (автор: Xupypr) и был адаптирован для целей портфельного моделирования и парного трейдинга. Индикатор предназначен для быстрого анализа графиков изменения стоимости портфелей/синтетиков непосредственно перед открытием позиций. Есть два основных сценария...
在OnTick()中控制按钮的按下。如果它在测试器中工作--在OnTick()中控制,但在现实生活中,这个控制块不会被执行,将在OnChartEvent()中控制。
怎么会呢?没有事件参数被传递给OnTick()。
这怎么可能呢?没有事件参数被传递给OnTick()。
但按下的按钮被监控
它与OnChartEvent()中的控件完全相同,不同的是它只在按下的那一刻被检查,而不是在每个刻度 上。但按下按钮是被控制的
在OnChartEvent()中的控件完全相同,唯一不同的是,检查是在点击的瞬间例外进行的,而不是在每一个刻度 上。这不是在发布的时刻吗?点击一个对象,只有在对象内按下-释放时才会被计算在内。如果你点击一个物体,在按住按钮的同时将光标从该物体上移开,然后松开按钮,该物体是否被点击?
然而,我还没有做过实验。
不是在推倒重来的时刻吗?点击一个物体,只有在物体内按下并释放才算数。如果你点击一个物体,在按住按钮的同时将光标从该物体上移开,然后松开按钮,该物体是否被点击?
然而,我还没有做过实验。
我也没有做过实验,所以我不能说什么是肯定的。但似乎是靠推的。甚至在某个地方有一个讨论这个问题的主题。如果我没记错的话,似乎他们甚至要求将按下和释放鼠标按钮的事件分开。
OnChartEvent()在测试器中不起作用。
请展示能在测试器中工作的按钮。例如,点击哪个,标志trade = true就会升起;再点击? trade = false。
如何才能做到这一点呢?没有事件参数被传递给OnTick()。
https://www.mql5.com/ru/forum/171668#comment_10574757
拆开EquityChartModeller指标的代码。
它有2个自定义功能。
我不明白在哪里用黄色强调。如果投资组合公式看起来像。"USDSEK-4 USDCAD+9 EURJPY-5 AUDNZD-5 EURAUD-1 GBPJPY+6 USDNOK-2",那么循环 while(p>=0)如何被覆盖为 if(p==0),如果它只在达到符号 if(X=="+"|X=="-") break; ?
然后在下面,如果(p==0),为什么手数被设置为1-Lots[Total-1]=1; ?
这里的指标:https://www.mql5.com/ru/code/10962
拆开EquityChartModeller指标的代码。
它有2个自定义功能。
...这里的指标:https://www.mql5.com/ru/code/10962
正确插入代码。
正确插入代码。
已纠正的
已纠正的
造型师 怎么样?Ctrl+, (英文为逗号)
我不是在挑剔你。只是你是需要帮助的人,所以你应该以可用的形式提供信息,而不是倾销。