// В глобальных переменных объявляем ещё одина массив, теперь с символами с которыми работает наш мультивалютный советникstring gsa_Symbols[];
// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами// (как это сделать - отдельная тема)// сама функцияint fMyTickets (string ar_Symbol[], // заполненный массив рабочих символовdouble& ar_Tickets[][11], // массив тикетов (для заполнения)int fi_Magic = -1) // MagicNumber
{
int NUM_Symbol, li_cnt = 0; // счетчик заполненияint li_total = OrdersTotal();
string ls_Sym;
//----for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
ls_Sym = OrderSymbol();
//---- Определяем номер символа в массиве (фильтр по Symbol)
NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
//---- Если ордер не "свой" - пропускаемif (NUM_Symbol < 0)
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic)
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- для дальнейших вычислений не лишним будет запомнить номер индекса символа в массиве символов
//---- но для этого не забудьте увеличить размер массива тикетов при его объявлении gda_Tickets[30][11]
ar_Tickets[li_cnt][10] = NUM_Symbol;
//---- увеличим счётчик заполненных тикетов
li_cnt++;
}
}
//----return (li_cnt);
}
// Объявляем массив в глобальных переменныхdouble gda_Tickets[30][10]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price// gda_Tickets[][4] - Order Profit// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// Добавляем массив для сбора ститистикиdouble gda_AddInfo[5]; // массив для хранения дополнительной информации по работе советника// gda_AddInfo[0] - количество соих ордеров (всех)// gda_AddInfo[1] - количество своих рыночных ордеров// gda_AddInfo[2] - общий размер открытых рыночных лотов// gda_AddInfo[3] - общий профит по открытым позициям// gda_AddInfo[4] - максимальная просадка по открытым позициямvoid fMyTickets (double& ar_Tickets[][10], // массив тикетов (для заполнения)double& ar_Info[], // массив для заполнения дополнительной информациейint fi_Magic = -1) // MagicNumber
{
int li_cnt = 0; // счетчик заполненияint li_total = OrdersTotal();
double tmp_Loss;
//----
tmp_Loss = ar_Info[4];
//---- Обнуляем заполняемый массив перед использованиемArrayInitialize (ar_Info, 0.0);
for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
//---- проверка на Symbolif (OrderSymbol() != Symbol())
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0) // предусматриваем возможность контролтровать любой Magic
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- увеличим счётчик заполненных тикетов
li_cnt++;
//---- заполняем массив дополнительной информацией
ar_Info[0]++;
if (OrderType() < 2)
{
ar_Info[1]++;
ar_Info[2] += OrderLots();
ar_Info[3] += OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
//---- Учитываем максимальную просадку
ar_Info[4] = MathMin (ar_Info[3], tmp_Loss);
//----return;
}
多币种的变体#2。
// В глобальных переменных объявляем массив, с символами, с которыми работает наш мультивалютный советникstring gsa_Symbols[];
// Массив с дополниетельной информацией должен быть 2-ух мерным// 1-ый индекс - это номер символа в массиве символов gsa_Symbols[]// Не забудьте перед его использованием задать ему размер в первом измерении равный количеству используемых символов// ArrayResize (gda_AddInfo, ArraySize (gsa_Symbols));double gda_AddInfo[][5]; // массив для хранения дополнительной информации по работе советника// gda_AddInfo[][0] - количество соих ордеров (всех)// gda_AddInfo[][1] - количество своих рыночных ордеров// gda_AddInfo[][2] - общий размер открытых рыночных лотов// gda_AddInfo[][3] - общий профит по открытым позициям// gda_AddInfo[][4] - максимальная просадка по открытым позициям// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами// (как это сделать - отдельная тема)void fMyTickets (string ar_Symbol[], // заполненный массив рабочих символовdouble& ar_Tickets[][11], // массив тикетов (для заполнения)double& ar_Info[][5], // массив для заполнения дополнительной информациейint fi_Magic) // MagicNumber
{
int NUM_Symbol, li_cnt = 0, li_Range = ArraySize (ar_Symbol); // счетчик заполненияint li_total = OrdersTotal();
string ls_Sym;
double tmp_Loss[];
//----//---- Инициализируем временный массив для хранения сведений о максимальной просадкеArrayResize (tmp_Loss, li_Range);
//---- Сохраняем в него эти сведенияfor (int li_int = 0; li_int < li_Range; li_int++)
{tmp_Loss[li_int] = ar_Info[li_int][4];}
//---- Обнуляем используемый массив
ArrayInitialize (ar_Info, 0.0);
for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
ls_Sym = OrderSymbol();
//---- Определяем номер символа в массиве (фильтр по Symbol)
NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
//---- Если ордер не "свой" - пропускаемif (NUM_Symbol < 0)
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0) // предусматриваем возможность контролтровать любой Magic
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
ar_Tickets[li_cnt][10] = NUM_Symbol;
//---- увеличим счётчик заполненных тикетов
li_cnt++;
//---- заполняем массив дополнительной информацией
ar_Info[NUM_Symbol][0]++;
if (OrderType() < 2)
{
ar_Info[NUM_Symbol][1]++;
ar_Info[NUM_Symbol][2] += OrderLots();
ar_Info[NUM_Symbol][3] += OrderProfit() + OrderSwap() + OrderCommission();
ar_Info[NUM_Symbol][4] = MathMin (tmp_Loss[NUM_Symbol], ar_Info[NUM_Symbol][3]);
}
}
}
//----return;
}
(整数 ): 通过即时执行,可以用预先设定的止损和止盈打开订单,设置滑点,当经纪人执行订单时的价格偏离交易者的要求价格时,可以打开订单。在市场执行中,不可能用预先确定的止损和/或止盈来开立订单,也没有滑点参数。该订单在经纪人执行订单时以任何可用的价格开仓。止损和/或止盈可以在订单打开后立即设置。大多数交易中心在即时执行模式下工作。没有那么多的交易中心以市场执行模式运作。
越来越多的经纪公司正在转向市场执行。很快,Integer提供的信息就会变得无关紧要。
这只是关于这两种模式的信息。
而这正是常见问题的最后一段所说的--一种趋势!https://www.mql5.com/ru/forum/131853/page3#464977
-------
顺便说一下,术语表如何,病人是否宁可活着?
1.而常见问题中的最后一段正是这样说的--趋势!https://www.mql5.com/ru/forum/131853/page3#464977
-------
2.顺便问一下,术语表如何,病人是否宁可活着?
1.没有看到链接上的常见问题中的最后一段,只对granit77的 帖子做出了反应。
2.我已经阅读了我提供自己帮助的那一节。但它是人们所希望的那样完整。基本上没有什么可补充的。我应该早点报告--我后悔没有这样做。
不过,该部分还是可以增加程序员和交易员正在使用的术语缩写的行话。我刚刚开始一份新的工作,现在我的空闲时间很少,至少勉强可以继续我自己的项目。因此,我将逐渐写下 "在一张纸上",当我积累得更多时,我将把它添加到该部分。好吗?
问题:获得一个 "自己 "订单的数组
答:从代码优化的角度来看,这是一种方便的方法:首先,我们对 "友好"(即具有给定的MagicNumber()的订单)订单进行 "修订",创建一个带有每个订单完整信息的票据数组,然后我们用同一个票据数组进行所有其他检查(用于平仓和修改头寸)。例子#1。收集关于一个货币对的门票信息。
如果你愿意,你可以声明这个函数为int类型,并使其返回 "自己的订单 "的数量。
如果我们的EA是多币种的。
例子#2。收集几个货币对的票据信息。
为了在这种情况下检查 "友好 "符号,我们还需要一个小函数。
而我们的函数将有这样的形式。
问题:获取 "自己 "的订单票数组
答案: (续)
如果你想让你的EA有关于其工作的额外统计数据,例如:最大缩水、总利润等,也不足为奇。这样,你就不必用额外的请求来 "打扰 "服务器,我们建议你为我们的功能添加功能(请原谅我的双关语)。在这种情况下,该函数可能看起来像这样
单货币EA的变体#1。
多币种的变体#2。
在上述关于票据信息收集的例子中,这些信息在绝大多数情况下是足够的。但在更复杂的系统中,没有人禁止你在票据阵列中存储有关信息,例如,如果在你的专家顾问中实现了虚拟停止。
一般来说,在这里你只受限于幻想/狂热的飞行和MQL4知识的水平。
TarasBY
为了避免不必要地用请求 "干扰 "服务器...
服务器在收集订单时不会受到干扰。将订单信息收集到一个数组中的意识形态--UG。这在常见问题中是绝对不允许的。
建议另一个选项。 为需要与 "自己的 "订单一起工作的人。