新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 252 1...245246247248249250251252253254255256257258259...1953 新评论 Maxim Kuznetsov 2017.07.19 13:06 #2511 >err=StringToInteger((string)err)这应该被载入史册;-)最初在err中你显然从GetLastError()中得到了int。将错误代码 转换成可读描述 ErrorDescription(err); 前提是#include <stdlib.mqh>被启用。但它的写法却让人很不爽。PS/ 而且不要学习MQL编程。MQL 4和5是特定平台的目标语言。 forexpipsrunner 2017.07.19 14:48 #2512 你能告诉我是否可以这样写吗?它不愿意打开交易。也许计算的数字格式不对?或者代码中的其他缺陷?double TakeLong(double shp){int CurrentDayRange=0, fiveDayATR=0, take=0;双TP_ATR=0。//////支点输入双P, S1, R1, S2, R2, S3, R3。double LastHigh, LastLow, x;int counted_bars = IndicatorCounted()。int limit, i;shp=iHigh(Symbol(),PERIOD_D1,0)。//---- 枢轴指标计算如果(counted_bars == 0){x = Period()。如果(x > 240)返回(-1)。}如果(counted_bars < 0)返回(-1)。limit = (Bars - counted_bars) - 1;//----for(i = limit; i >= 0; i--){如果(High[i+1] > LastHigh)LastHigh = High[i+1];//----如果(Low[i+1] < LastLow)LastLow=Low[i+1]。如果(TimeDay(Time[i]) !=TimeDay(Time[i+1]){P = (LastHigh + LastLow + Close[i+1]) / 3;R1 = (2*P) - LastLow。S1 = (2*P) - LastHigh;R2 = P + (LastHigh - LastLow)。S2 = P - (LastHigh - LastLow)。R3=(2*P)+(LastHigh-(2*LastLow))。S3 = (2*P) - ((2* LastHigh) - LastLow)。LastLow = Open[i];LastHigh = Open[i];}}////ATR计算for (i=1;i<6;i++){ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)); }FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits())。CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i))。如果(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; 否则TP_ATR=0。如果(Bid>R1 && TP_ATR==0) take=shp;否则如果(Bid<R1 && R1<TP_ATR)take=R1; 否则take=TP_ATR。return(take)。} Any questions from newcomers How to change this 哪位兄弟能帮我改一下这段代码,谢谢!!! Konstantin Erin 2017.07.19 15:31 #2513 forexpipsrunner: 请告诉我你能不能这样写,它不愿意打开交易建议的代码看起来像一个指标。交易是由专家顾问或脚本开启的。指标中不允许 调用OrderSend函数。指示器可以报警--在适当的地方插入警报功能的呼叫或声音 forexpipsrunner 2017.07.19 16:03 #2514 STARIJ:拟议的代码与指标类似。交易是由专家顾问或脚本开启的。指标中禁止 调用OrderSend函数。指示器可能发出信号--在适当的地方插入警报功能调用或声音这是TP的定义代码,它将结果发送到OrderSend。如果没有这个复杂的算法,交易被发送,但没有办法发送。我调用函数 TP = TakeLong(SHP)。 Konstantin Erin 2017.07.19 16:23 #2515 forexpipsrunner: 这是TP的定义代码,它给OrderSend提供了结果,如果没有这个算法,交易就会被发送,没有办法调试有很多方法--在确定存在错误的情况下寻找错误的过程。第一个是F5--在MetsEditor中开始调试。 2)使用Alerts来跟踪执行。3和4)输出调试信息到文本标签和Comment函数。选择方便的方式,调试这个简单的功能 - 然后你就会成为一个程序员。一个有数千行的程序被认为是复杂的。 Aleksey Vyazmikin 2017.07.19 18:30 #2516 forexpipsrunner:你能不能告诉我,你能不能这样写。它不想打开交易,也许计算的数字格式不对?或者代码中的其他缺陷? int take=0 - 你返回一个整数,这个变量不应该是一个双数吗? ponochka 2017.07.19 19:05 #2517 你好!我想做一个 "轨道 "图案,但我搞不清楚烛台的体量大小....。我计算烛台主体的大小如下:MathAbs( Close1[i] - Open1[i] ) / Point + 1MathAbs( Close2[i] - Open2[i] ) / Point + 1在完整的代码中看起来是这样的double Close1 =iClose(Symbol(), 0, i);double Open1 = iOpen(Symbol(), 0, i);double Close2 = iClose(Symbol(), 0, i+1);double Open2 = iOpen(Symbol(), 0, i+1) 。MathAbs( Close1[i] - Open1[i] ) / Point + 1MathAbs( Close2[i] - Open2[i] ) / Point + 1if (Close1 < Open1 && Close2 > Open2){BUY();}if ( Close1 > Open1 && Close2 < Open2){SELL( );}这是否正确?我怎样才能使它发挥作用? Konstantin Erin 2017.07.20 05:45 #2518 sviter-pro: 你好,我想做一个 "轨道 "图案,但我搞不清楚蜡烛体的大小....。你在M1模拟账户 上试过吗?你能得到什么? ponochka 2017.07.20 06:45 #2519 STARIJ:你在M1模拟账户 上试过吗?结果是什么? 没有任何效果....(() [删除] 2017.07.20 08:04 #2520 void trailing(string symbol,string comment,int magic,int trail_p) { if(symbol==NULL) symbol=Symbol(); for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==symbol && OrderComment()==comment && OrderMagicNumber()==magic) { switch(OrderType()) { case OP_BUY: if(OrderOpenPrice()+(trail_p*Point)<Ask && OrderStopLoss()+(trail_p*Point)<Ask) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE)) { Print("OrderModify завершилась с ошибкой #",GetLastError()); } } break; case OP_SELL: if(OrderOpenPrice()-(trail_p*Point)>Bid && OrderStopLoss()-(trail_p*Point)>Bid) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-(trail_p*Point),OrderTakeProfit(),OrderExpiration(),clrNONE)) { Print("OrderModify завершилась с ошибкой #",GetLastError()); } } break; } } } Comment("StopLoss=",OrderStopLoss()); } }你能告诉我,为什么每次打勾 都会触发拖网? 1...245246247248249250251252253254255256257258259...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
>err=StringToInteger((string)err)
这应该被载入史册;-)
最初在err中你显然从GetLastError()中得到了int。将错误代码 转换成可读描述 ErrorDescription(err); 前提是#include <stdlib.mqh>被启用。
但它的写法却让人很不爽。
PS/ 而且不要学习MQL编程。MQL 4和5是特定平台的目标语言。
你能告诉我是否可以这样写吗?它不愿意打开交易。也许计算的数字格式不对?或者代码中的其他缺陷?
double TakeLong(double shp)
{
int CurrentDayRange=0, fiveDayATR=0, take=0;
双TP_ATR=0。
//////支点输入
双P, S1, R1, S2, R2, S3, R3。
double LastHigh, LastLow, x;
int counted_bars = IndicatorCounted()。
int limit, i;
shp=iHigh(Symbol(),PERIOD_D1,0)。
//---- 枢轴指标计算
如果(counted_bars == 0)
{
x = Period()。
如果(x > 240)
返回(-1)。
}
如果(counted_bars < 0)
返回(-1)。
limit = (Bars - counted_bars) - 1;
//----
for(i = limit; i >= 0; i--)
{
如果(High[i+1] > LastHigh)
LastHigh = High[i+1];
//----
如果(Low[i+1] < LastLow)
LastLow=Low[i+1]。
如果(TimeDay(Time[i]) !=TimeDay(Time[i+1])
{
P = (LastHigh + LastLow + Close[i+1]) / 3;
R1 = (2*P) - LastLow。
S1 = (2*P) - LastHigh;
R2 = P + (LastHigh - LastLow)。
S2 = P - (LastHigh - LastLow)。
R3=(2*P)+(LastHigh-(2*LastLow))。
S3 = (2*P) - ((2* LastHigh) - LastLow)。
LastLow = Open[i];
LastHigh = Open[i];
}
}
////ATR计算
for (i=1;i<6;i++)
{ if(iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)>0) FiveDayATR += (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i)); }
FiveDayATR = NormalizeDouble(FiveDayATR/5,Digits())。
CurrentDayRange = (iHigh(NULL, PERIOD_D1, i)-iLow(NULL, PERIOD_D1, i))。
如果(FiveDayATR-CurrentDayRange>0) TP_ATR=Ask+FiveDayATR-CurrentDayRange; 否则TP_ATR=0。
如果(Bid>R1 && TP_ATR==0) take=shp;
否则如果(Bid<R1 && R1<TP_ATR)take=R1;
否则take=TP_ATR。
return(take)。
}
建议的代码看起来像一个指标。交易是由专家顾问或脚本开启的。指标中不允许 调用OrderSend函数。指示器可以报警--在适当的地方插入警报功能的呼叫或声音
拟议的代码与指标类似。交易是由专家顾问或脚本开启的。指标中禁止 调用OrderSend函数。指示器可能发出信号--在适当的地方插入警报功能调用或声音
这是TP的定义代码,它将结果发送到OrderSend。如果没有这个复杂的算法,交易被发送,但没有办法发送。我调用函数 TP = TakeLong(SHP)。
调试有很多方法--在确定存在错误的情况下寻找错误的过程。第一个是F5--在MetsEditor中开始调试。 2)使用Alerts来跟踪执行。3和4)输出调试信息到文本标签和Comment函数。选择方便的方式,调试这个简单的功能 - 然后你就会成为一个程序员。一个有数千行的程序被认为是复杂的。
你能不能告诉我,你能不能这样写。它不想打开交易,也许计算的数字格式不对?或者代码中的其他缺陷?
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
在完整的代码中看起来是这样的
double Close1 =iClose(Symbol(), 0, i);
double Open1 = iOpen(Symbol(), 0, i);
double Close2 = iClose(Symbol(), 0, i+1);
double Open2 = iOpen(Symbol(), 0, i+1) 。
MathAbs( Close1[i] - Open1[i] ) / Point + 1
MathAbs( Close2[i] - Open2[i] ) / Point + 1
if (Close1 < Open1 && Close2 > Open2){
BUY();
}
if ( Close1 > Open1 && Close2 < Open2){
SELL( );
}
这是否正确?我怎样才能使它发挥作用?
你在M1模拟账户 上试过吗?你能得到什么?
你在M1模拟账户 上试过吗?结果是什么?
你能告诉我,为什么每次打勾 都会触发拖网?