mql5语言的特点、微妙之处以及技巧 - 页 7 1234567891011121314...247 新评论 fxsaber 2017.02.27 00:25 #61 为了处理RAM文件,可以使用以下结构const int handleRAM = FileOpen("\\\\.\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN);事先创建 一个适当的文件。通过这种实现方式,可以方便/快速地将任何维度(和不同维度)的数组相互复制--而不需要强奸HDD/SDD。// Копирование массивов любых размерностей (и разных) друг в друга#define ARRAYCOPY(Dest, Source) \ if (ArraySize(Source) > 0) \ { \ const int handleRAM = FileOpen("\\\\REN\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN); \ \ if (handleRAM != INVALID_HANDLE) \ { \ if (FileWriteArray(handleRAM, Source) > 0) \ FileReadArray(handleRAM, Dest); \ \ FileClose(handleRAM); \ } \ } 这是一个普遍的解决方案。这种抄袭的经典之作是这样的// Копирует двумерный массив в одномерный#define MATRIX_TO_VECTOR(Matrix, Vector) \ if (ArraySize(Matrix) > 0) \ { \ const int Range1 = ArrayRange(Matrix, 0); \ const int Range2 = ArrayRange(Matrix, 1); \ \ ArrayResize(Vector, Range1 * Range2); \ \ int k = 0; \ \ for (int i = 0; i < Range1; i++) \ for (int j = 0; j < Range2; j++) \ { \ Vector[k] = Matrix[i][j]; \ \ k++; \ } \ }// Копирует одномерный массив в двумерный#define VECTOR_TO_MATRIX(Vector, Matrix) \ if (ArraySize(Vector) > 0) \ { \ const int Size = ArraySize(Vector); \ const int Range = ArrayRange(Matrix, 1); \ \ ArrayResize(Matrix, Size / Range + ((Size % Range == 0) ? 0 : 1)); \ \ for (int i = 0; i < Size; i++) \ Matrix[i / Range][i % Range] = Vector[i]; \ } 使用宏来代替函数,因为不可能将一个普遍大小的数组传递给函数。 Features of the mql5 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. [存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. Alexey Volchanskiy 2017.02.27 00:59 #62 德米特里-费多塞耶夫。重点是OnTradeTransaction()不会在OrderSend后立即触发。总之,这里只是一群争论者,没有进入争论的主题。如果必须在OrderSend()之后立即做一些事情,有两种算法的变体。1.我们可以启动一个循环,等待订单和交易清单的更新。2.完成OnTick()并等待OnTradeTransaction()触发。3.通过打勾检查,看是否有新的订单或交易出现在列表中。 选择2和3 )) Artyom Trishkin 2017.02.27 13:39 #63 什么可以取代mql5中的四重MODE_MARGINREQUIRED ? Vitaly Muzichenko 2017.02.27 13:58 #64 阿尔乔姆-特里什金。 在mql5中,我可以用什么来代替MODE_MARGINREQUIRED?这个问题你需要问开发人员,因为论坛成员都不知道。我已经在不同的主题中问了4次这个问题,有一次我甚至得到了答案:"使用搜索",但搜索中的问题有100多个,没有一个答案。开发商没有 回答这个问题,可能是因为在Five中 没有可能 获得与存款货币不同的货币对的保证金。在Five中,所有的东西都还是原始的,而且看起来会保持这种状态,但每个人都有一个OpenGL =) Andrey Barinov 2017.02.27 14:04 #65 Artyom Trishkin: 什么可以取代mql5中的四重MODE_MARGINREQUIRED ?OrderCalcMargin() try https://www.mql5.com/ru/docs/trading/ordercalcmargin Vitaly Muzichenko 2017.02.27 14:08 #66 安德烈-巴里诺夫。 订单CalcMargin() try这是可以理解的,但从指标上看,这并不可行 double One_Lot=0.0; OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot); Comment(One_Lot); // залог на 1 лот Andrey Barinov 2017.02.27 14:10 #67 维塔利-穆齐琴科。这是可以理解的,但它与指标不兼容。 double One_Lot=0.0; OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot); Comment(One_Lot); 它在帮助中说,它不能从指标中工作https://www.mql5.com/ru/docs/runtime/running。 Artyom Trishkin 2017.02.27 14:11 #68 安德烈-巴里诺夫。 这一点在帮助中写得很明确,从指标https://www.mql5.com/ru/docs/runtime/running,这一点不起作用。 我希望有一个独立于程序类型的计算。 Andrey Barinov 2017.02.27 14:12 #69 阿尔乔姆-特里什金。 我希望有一个独立于节目类型的计算。 哦,我也想得到很多东西 :) Artyom Trishkin 2017.02.27 14:13 #70 安德烈-巴里诺夫。 哦,我也想要很多 :) 嗯...这不是一个答案...而这个问题只是关于支部的话题。 1234567891011121314...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
事先创建 一个适当的文件。
通过这种实现方式,可以方便/快速地将任何维度(和不同维度)的数组相互复制--而不需要强奸HDD/SDD。
#define ARRAYCOPY(Dest, Source) \
if (ArraySize(Source) > 0) \
{ \
const int handleRAM = FileOpen("\\\\REN\\pipe\\RAM", FILE_READ | FILE_WRITE | FILE_BIN); \
\
if (handleRAM != INVALID_HANDLE) \
{ \
if (FileWriteArray(handleRAM, Source) > 0) \
FileReadArray(handleRAM, Dest); \
\
FileClose(handleRAM); \
} \
}
#define MATRIX_TO_VECTOR(Matrix, Vector) \
if (ArraySize(Matrix) > 0) \
{ \
const int Range1 = ArrayRange(Matrix, 0); \
const int Range2 = ArrayRange(Matrix, 1); \
\
ArrayResize(Vector, Range1 * Range2); \
\
int k = 0; \
\
for (int i = 0; i < Range1; i++) \
for (int j = 0; j < Range2; j++) \
{ \
Vector[k] = Matrix[i][j]; \
\
k++; \
} \
}
// Копирует одномерный массив в двумерный
#define VECTOR_TO_MATRIX(Vector, Matrix) \
if (ArraySize(Vector) > 0) \
{ \
const int Size = ArraySize(Vector); \
const int Range = ArrayRange(Matrix, 1); \
\
ArrayResize(Matrix, Size / Range + ((Size % Range == 0) ? 0 : 1)); \
\
for (int i = 0; i < Size; i++) \
Matrix[i / Range][i % Range] = Vector[i]; \
}
重点是OnTradeTransaction()不会在OrderSend后立即触发。
总之,这里只是一群争论者,没有进入争论的主题。
如果必须在OrderSend()之后立即做一些事情,有两种算法的变体。
1.我们可以启动一个循环,等待订单和交易清单的更新。
2.完成OnTick()并等待OnTradeTransaction()触发。
3.通过打勾检查,看是否有新的订单或交易出现在列表中。
在mql5中,我可以用什么来代替MODE_MARGINREQUIRED?
这个问题你需要问开发人员,因为论坛成员都不知道。我已经在不同的主题中问了4次这个问题,有一次我甚至得到了答案:"使用搜索",但搜索中的问题有100多个,没有一个答案。开发商没有 回答这个问题,可能是因为在Five中 没有可能 获得与存款货币不同的货币对的保证金。
在Five中,所有的东西都还是原始的,而且看起来会保持这种状态,但每个人都有一个OpenGL =)
什么可以取代mql5中的四重MODE_MARGINREQUIRED ?
订单CalcMargin() try
这是可以理解的,但从指标上看,这并不可行
OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
Comment(One_Lot); // залог на 1 лот
这是可以理解的,但它与指标不兼容。
OrderCalcMargin(ORDER_TYPE_BUY,Symbol(),1.0,SymbolInfoDouble(Symbol(),SYMBOL_ASK),One_Lot);
Comment(One_Lot);
这一点在帮助中写得很明确,从指标https://www.mql5.com/ru/docs/runtime/running,这一点不起作用。
我希望有一个独立于节目类型的计算。
哦,我也想要很多 :)