double A[][10];
int renge_A_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_A_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)double B[][10];
int renge_B_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_B_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)int count_B=0;
//+------------------------------------------------------------------+//| Вариант 1. Копируем строки "А" в "В" без изменений |//+------------------------------------------------------------------+void Fun_1()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: "А" скопирован в "В" без изменений // renge_A_one = renge_В_one// renge_A_two = renge_В_two//+------------------------------------------------------------------+//| Вариант 2. Копируем строки "А" в "В" при условии |//+------------------------------------------------------------------+void Fun_2()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
if(A[i][3]>0)
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: часть строк "В" с соответствующими значениями// часть строк "В" заполнена "0" полностью, при том, что в "А" заполнены ЗНАЧЕНИЯМИ// renge_A_one > renge_В_one// renge_A_two = renge_В_two
double A[][10];
int renge_A_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_A_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)double B[][10];
int renge_B_one=0; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_B_two=0; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)int count_B=0;
//+------------------------------------------------------------------+//| Вариант 1. Копируем строки "А" в "В" без изменений |//+------------------------------------------------------------------+void Fun_1()
{
renge_A_one==ArrayRange(A, 0);// Выясняем Размер первого измерения (число строк)renge_A_two==ArrayRange(A, 1);// Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: "А" скопирован в "В" без изменений // renge_A_one = renge_В_one// renge_A_two = renge_В_two//+------------------------------------------------------------------+//| Вариант 2. Копируем строки "А" в "В" при условии |//+------------------------------------------------------------------+void Fun_2()
{
renge_A_one==ArrayRange(A, 0); // Выясняем Размер первого измерения (число строк)
renge_A_two==ArrayRange(A, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for(int i=0; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
if(A[i][3]>0)
{
count_B++;
ArrayResize(B, count_B);
for(int j=0; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
}
renge_B_one==ArrayRange(B, 0); // Выясняем Размер первого измерения (число строк)
renge_B_two==ArrayRange(B, 1); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: часть строк "В" с соответствующими значениями// часть строк "В" заполнена "0" полностью, при том, что в "А" заполнены ЗНАЧЕНИЯМИ// renge_A_one > renge_В_one// renge_A_two = renge_В_two
这就是我得到的东西。请告诉我什么是错的。提前感谢您!
你好!
我在这里写,因为mq4上似乎没有人。
你能告诉我我做错了什么吗?选项2不起作用。
你好,请你帮助我在MT4中编写一个函数。我知道我的账户余额,我知道将有多少笔交易(如9笔),我知道风险(如账户余额的3%),我需要计算第一笔交易的手数,如果接下来的每笔交易都将翻倍,并且所有交易都将相互重叠。
这就是我得到的东西。请告诉我什么是错的。提前感谢您!
你好!
我在这里写,因为mq4上似乎没有人。
你能告诉我我做错了什么吗?选项2不起作用。
突出显示:应该有一个赋值--"=",你有一个比较--"=="。
大家好!
我正在学习在MT4中编写机器人,我决定从二元期权开始。我写了一个最简单的EA,编译器产生了一堆我无法理解的警告(
帮助:"哦,MQL4大师" =))))))
提前感谢!)
以下是该EA的代码。
//+------------------------------------------------------------------+
//|Bolinger_Bands_traider。ǞǞǞ
//|Copyright 2017, Penrov Nikolay | 版权所有
//|vk.com/buzamonolit |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Petrov Nikolay"
#财产链接 "vk.com/buzamonolit"
#财产版本 "1.00"
#属性严格
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
外部int Bolinger_Bands = 20; //布林带 周期。
外部双倍Delta = 0.0003; // 在什么距离开单?
string Symb; // 金融工具的名称。
int Total; // 订单的数量
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int init()
{
//----
Initialize_Objects(0)。
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
//----
double price = Bid;
double CurrBol_High = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_UPPER, 0);
double CurrBol_Low = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_LOWER, 0)。
double PriceBol_High = price - CurrBol_High;
double PriceBol_Low = price - CurrBol_Low;
datetime NextClose = Time[0] + Period()*60*2;
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;
int err;
// 顺序计数
Symb=Symbol()。// 翅片的名称。symbol(); // symbol(); // symbol(); // order icon(); // symbol()。
总计=0。// 订单数量
for(int i=1; i<=OrdersTotal(); i++) // 订单循环
{
如果(OrderSelect(i-1,SELECT_BY_POS)==true) //如果有一个下一个
{// 订单分析。
如果(OrderSymbol()!=Symb)继续; // 不是我们的金融工具
如果(OrderType()>1)// 我们有一个未决订单
{
Alert("检测到挂单,专家顾问不工作;)
return(0);//退出()
}
总计++。// 柜台市场。秩序
如果(总数>1)// 不超过一个订单
{
Alert("几个市场订单,专家顾问不工作。")。
return(0);//退出()
}
}
}
ObjectSetText("Obj_Label", "TF" + Period() + ", " + DoubleToStr(price, 5) + ", tick " + TimeToStr(TimeCurrent() , TIME_SECONDS) + ", O@"+ TimeToStr(Time[0], TIME_MINUTES) + ", NC@"+ TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " min)", 10, "Arial", DarkGreen ) 。
ObjectSetText("Obj_Label2", "Orders:" + Total + ", delta " + DoubleToStr(Delta,5) + ", distance to MA:" + DoubleToStr(PriceBol_High, 5), 10, "Arial", DarkGreen ) 。
ObjectSetText("Obj_Label3", "Orders: " + Total + ", Delta " + DoubleToStr(Delta,5) + ", distance to MA:" + DoubleToStr(PriceBol_Low, 5), 10, "Arial", DarkGreen ) 。
//价格分析和开单
如果((MathAbs(PriceBol_Low)<Delta)&&(价格>CurrBol_Low)&&(Open[0]>CurrBol_Low+Delta) &&(Total<1))
{
如果(OrderSend(Symbol(), OP_BUY, 1.00,Bid , 3, 0, 0, "BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Green) >0) Print ("Opened OK")。
否则
{
err=GetLastError()。
Print("error(",err,"))。
return(0);
}
Print ("CALL @ " + price + " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
如果((MathAbs(PriceBol_High) < Delta) && (price < CurrBol_High) && (Open[0] < CurrBol_High-Delta) && (Total<1)
{
如果(OrderSend(Symbol(), OP_SELL, 1.00,Bid , 3, 0, 0, "BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Red) > 0) 打印("Opened OK")。
否则
{
err=GetLastError()。
Print("error(",err,"))。
return(0);
}
Print ("PUT @ " + price + " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
//----
return(0);
}
//+------------------------------------------------------------------+
int Initialize_Objects(int Win) // User fie
{// .对象创建
ObjectCreate("Obj_Label",OBJ_LABEL, Win, 0,0); //对象创建
ObjectSet("Obj_Label", OBJPROP_CORNER, 0); // 绑定到一个角上
ObjectSet("Obj_Label", OBJPROP_XDISTANCE, 13); // X坐标
如果(Win==0)
ObjectSet("Obj_Label",OBJPROP_YDISTANCE, 15);//Y坐标
否则
ObjectSet("Obj_Label",OBJPROP_YDISTANCE,15);//Y坐标
ObjectCreate("Obj_Label2",OBJ_LABEL,Win, 0,0); // 对象创建
ObjectSet("Obj_Label2",OBJPROP_CORNER, 0); // 绑定到一个角落。
ObjectSet("Obj_Label2", OBJPROP_XDISTANCE, 13); // X坐标
如果(Win==0)
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);//Y坐标
否则
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);//Y 坐标。
ObjectCreate("Obj_Label3",OBJ_LABEL, Win, 0,0); // 创建对象
ObjectSet("Obj_Label3",OBJPROP_CORNER, 0); // 绑定到一个角落。
ObjectSet("Obj_Label3", OBJPROP_XDISTANCE, 13); // X坐标
如果(Win==0)
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);//Y坐标
否则
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);//Y 坐标。
return(0);//从用户处退出。功能
}
以下是警告。我搞不清楚他不喜欢什么(
由于类型转换可能导致数据丢失 Bolinger_Bands_traider.mq4 51 24
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 76 35
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 76 227
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 77 43
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 78 43
从 "字符串 "到 "数字 "的隐式转换 Bolinger_Bands_traider.mq4 85 71
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 93 23
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 93 91
从 "字符串 "到 "数字 "的隐式转换 Bolinger_Bands_traider.mq4 99 72
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 107 23
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 107 91
0个错误(s), 11个警告(s), 编译时间: 204 msec 1 12
小学。错误在于GetLots() 函数。整个功能。
也许你能告诉我怎么写才正确。我想用循环的方式计算,从最大的手数开始强行计算。
也许你能告诉我怎么写才正确。我想用一个循环来计算,从最大批次开始尝试。
逻辑在哪里?你为第一个订单设定最大允许手数,然后为每个连续的订单增加该手数。说句不好听的,你不觉得这很不理智吗?
此外,你用一些完全无法理解的方法减少循环中第一个订单的手数,而之前 "计算 "过的其他订单的手数保持不变,这些数值没有超出这个函数的极限。那么,他们是怎么做的呢?
更不用说增量循环不能是一个实数,它必须是一个计数器,一个整数。但你把批价设置为一个计数器,每次迭代时从里面减去一个。这是一个重大的错误,一个非常严重的错误。
首先在你的头脑中明确逻辑,然后尝试将其实现在你的代码中。
但这里有一些警告。我不明白他不喜欢什么。
由于类型转换可能导致数据丢失 Bolinger_Bands_traider.mq4 51 24
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 76 35
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 76 227
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 77 43
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 78 43
从 "字符串 "到 "数字 "的隐式转换 Bolinger_Bands_traider.mq4 85 71
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 93 23
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 93 91
从 "字符串 "到 "数字 "的隐式转换 Bolinger_Bands_traider.mq4 99 72
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 107 23
从 "数字 "到 "字符串 "的隐式转换 Bolinger_Bands_traider.mq4 107 91
0个错误(s), 11个警告(s), 编译时间: 204 msec 1 12
输出一行数字51,因为这里没有计数,可以理解为错误" 由于类型转换Bolinger_Bands_traider.mq4 51 24 "的数据可能丢失。
其余的:"从'数字'到'字符串'的隐式转换 Bolinger_Bands_traider.mq4 107 91
将数值翻译成我们创建对象的文本字符串--例如,文本字符串
阶段()
它应该是
DoubleToString(Period(),0)
将数字值转化为文本字符串,在这里我们创建一个文本字符串对象,比如说
阶段()
它应该是
DoubleToString(Period(),0)
从什么时候开始,周期是一种双倍类型?