任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1003

 
 

请告知如何实施以下内容。

图表上有自定义的线条,让它们的数量为 "n"。当价格接近其中一条线时,如何获得价格值?

提前感谢!

 

大家好)请帮助 - 目标是(如果价格高于(100点)"线",那么 "买入" )。)如何表达(价格比任何数值高100点),还有这个问题,如何知道目前移动平均线 的价格?

预先感谢 )

 
Tema97:

大家好)请帮助 - 目标是(如果价格高于(100点)"线",那么 "买入" )。)如何表达(价格比任何数值高100点),还有这个问题,如何知道目前移动平均线的价格?

预先感谢 )

Tema,阅读文档,那里描述了iMa以及图形对象。有一个函数ObjectGetDouble(有相应的参数) 来获取一条线的价格
 

请告知新人如何避免在订单被关闭后重新开盘,同时保持开盘的交易条件。

例如:如果随机指数向上越过50水平,打开买入。在随机指数反转时,或当它达到80水平时,或在获利时关闭。但交易条件的开放是保留的!也就是说,随机指数保持在50以上,买盘再次打开!

double S_1=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,0)。

double S_2=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,1)。

如果(S_1>50)

{

Opn_B=true。

}

如果(S_1<S_2||S_1>80)

{

Cls_B=true。

}

我在简单的专家顾问计划中插入交易标准,这在MQL教程中有所介绍。请告知使用哪个功能来避免这个问题。谢谢你!

 
if(S_1 > 50 && S_2 < 50)

这是自下而上跨越50水平的条件。

 
AlexeyVik:

这是自下而上跨越50水平的条件。

非常感谢您!我现在要试一试。
 
我如何在不关闭图表的情况下将一个 "附加 "指标(或EA)从图表中 "分离 "出来?
 
有没有可能在图表上放一个实时工作的AccountEquity()指标?我在哪里可以得到它?
 

你好,请问你能不能给我建议?我正在改变MQL4教程中提供的专家顾问的交易标准。当我试图为买入设置止损时,程序给出错误130:错误的止损。请解释一下原因?

// M15的数值

外部双数 StopLoss =0; // 正在开仓的订单的SL。

外部双数TakeProfit =0; // 正在开仓的订单的TP。

外来的int K = 5。

外来的int D = 3;

外来的int slowing = 3;

外来的int price_field = 0;


Extern int Level_1 = 80; // Stochastic level

extern int Level_2 = 20;

外部inttern Period_MA_2 = 31; // MA周期2

外部双倍Rastvor =28.0; // MA之间的距离

extern double Lots =0.01; // 固定的手数。

外部双倍Prots =0.07; // 自由资金的百分比

bool Work=true; // 专家顾问将工作。

string Symb; // 金融工具的名称

//--------------------------------------------------------------- 2 --

int start()

{

䵮䵮

K_级别。

总数, // 窗口中的订单数

Tip=-1, // 选择的订单类型(B=0,S=1)。

Ticket; // 订单号

双重S_1。

S_2,

MA_1_t, // MA_1_t值。MA_1当前值

MA_2_t, // 值。MA_2 current MA_2_t value // 按顺序选择的手数

Lots, //Lots Count in Order currently selected

Lts, //开放订单中的手数

Min_Lot, // 最小地段数

步骤,//地段大小变化的步骤

免费, // 目前的免费资金

One_Lot, // 一批的价值

价格, // 所选订单的价格

SL, // 所选订单的SL价格

TP; // 所选订单的TP

bool

Ans =false, // 关闭后的服务器答案

Cls_B=false, // 关闭购买的标准

Cls_S=false, //关闭Sell的标准。

Opn_B=false, //开买的标准

Opn__S=false; // 开启Sell的标准。

//--------------------------------------------------------------- 3 --

//预处理

如果(Bars < Period_MA_2) // 没有足够的条数

{

Alert("窗口中没有足够的条形,专家顾问不工作。")。

return; // 退出start()

}

if(Work==false) // 严重错误。

{

Alert("Critical error. Expert Advisor is not working.")。

return; // 从start()退出。

}

//--------------------------------------------------------------- 4 --

// 顺序计数

Symb=Symbol(); // 金融工具的名称。

总数=0; // 订单数量

for(int i=1; i<=OrdersTotal(); i++)// 订单循环

{

如果(OrderSelect(i-1,SELECT_BY_POS)==true) //如果

{ // 订单分析。

如果(OrderSymbol()!=Symb)继续; // 不是我们的金融工具

如果(OrderType()>1) // 我们有一个待定订单

{

Alert("检测到挂单,专家顾问不工作;)

return; // Exit()

}

总计++; // 市场订单计数器

if (Total>1) // 不超过一个订单

{

警报("几个市场订单,专家顾问不工作;)

return; // Exit()

}

Ticket=OrderTicket(); // 选择的订单号。

Tip =OrderType(); // 所选订单的类型。

Price =OrderOpenPrice(); // 所选订单的价格。

SL =OrderStopLoss(); // 所选订单的SL。

TP =OrderTakeProfit(); // 所选订单的TP。

Lot =OrderLots(); // Lot的数量

}

}

//--------------------------------------------------------------- 5 --

// 贸易标准

S_1=iStochastic(NULL,0,K,D,slowing,MODE_SMA,price_field,MODE_MAIN,0)。


S_2=iStochastic(NULL,0,K,D,sling,MODE_SMA,price_field,MODE_MAIN,1)。


如果(S_1 > 50 && S_2 < 50)


{


Opn_B=true。


}


如果(S_1<S_2||(S_1 < 80 && S_2 > 80))


{


Cls_B=true。


}

如果(S_1 < 50 && S_2 > 50)


{


Opn_S=true。


}


如果(S_1>S_2||(S_1>20 && S_2<20))


{


Cls_S=true。


}

//--------------------------------------------------------------- 6 --

// 关闭订单

while(true) // 关闭订单循环。

{

if (Tip==0 && Cls_B==true) //打开买入订单。

{ //有一个封闭的标准

Alert("Trying to close Buy" ,Ticket," ;)

RefreshRates(); // 刷新数据

Ans=OrderClose(Ticket,Lot,Bid,2); // Closed Buy

如果(Ans==true) // 成功了 :)

{

警报("关闭买入订单",Ticket;)

break; // 从闭环中退出

}

如果(Fun_Error(GetLastError())==1) //错误处理

continue; // retry

return; // 从start()退出。

}

if (Tip==1 && Cls_S==true) // 卖出订单打开。

{ // 有一个接近的标准

Alert("Attempting to close Sell",Ticket," ;)

RefreshRates(); // 刷新数据

Ans=OrderClose(Ticket,Lot,Ask,2); // Close Sell

如果(Ans==true) // 成功了 :)

{

提醒("卖出订单关闭",Ticket;)

break; // 从闭环中退出

}

如果(Fun_Error(GetLastError())==1) //错误处理

continue; // retry

return; // 从start()退出。

}

break; // Exit while

}

//--------------------------------------------------------------- 7 --

// 顺序值

RefreshRates(); // 刷新数据

Min_Lot=MarketInfo(Symb,MODE_MINLOT); //最小的手数

Free =AccountFreeMargin(); // 释放资金

One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//1手的价值

步骤 =MarketInfo(Symb,MODE_LOTSTEP); // 步骤变化大小

如果 (Lots > 0) // 如果指定了地段

Lts =Lots; // 我们与他们一起工作

否则//自由资金的百分比

Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;//要打开

if(Lts < Min_Lot) Lts=Min_Lot; // 不小于Min_Lot; // 不小于Min_Lot

if(Lts*One_Lot > Free) // 比Free更贵的地段

{

Alert(" Not enough money ", Lts," lots)。

return; // 退出start()

}

//--------------------------------------------------------------- 8 --

//开启订单

while(true) //Order close loop.

{

if (Total==0 && Opn_B==true) // 没有未结订单

{ //开放购买标准。

RefreshRates(); // 更新数据

Alert("Trying to open Buy. Waiting for reply...")。

Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,StopLoss,TakeProfit);//open Buy

if (Ticket > 0) // 它成功了 :)

{

警报("买入订单打开",Ticket;)

return; //退出订单

}

如果(Fun_Error(GetLastError())==1) //错误处理

continue; // retry

return; // 从start()退出。

}

if (Total==0 && Opn_S==true) // 没有未结订单

{ //开放销售标准。

RefreshRates(); // 更新数据

Alert("Attempting to open Sell. Waiting for reply...")。

Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,StopLoss,TakeProfit);//Open Sel.

if (Ticket > 0) // 它成功了 :)

{

警报("卖出订单打开",Ticket;)

return; //退出订单

}

如果(Fun_Error(GetLastError())==1) //错误处理

continue; // retry

return; // 从start()退出。

}

break; // Exit while

}

//--------------------------------------------------------------- 9 --

return; //从start()中退出。

}


//-------------------------------------------------------------- 10 --

int Fun_Error(int Error) // 错误处理 fie

{

switch(Error)

{ // 无法克服的错误。

case 4: Alert("The trade server is busy. Try again...");

Sleep(3000); // 简单的解决方案。

return(1); // 退出函数。

case 135:Alert("Price changed. Try again...")。

RefreshRates(); // 刷新数据。

return(1); // 从函数中退出。

case 136:Alert("No price. Waiting for a new tick...")。

while(RefreshRates()==false) // 读取一个新的刻度线

Sleep(1); // 循环中的延迟。

return(1); // 从函数中退出。

case 137:Alert("Broker is busy. Try again...");

Sleep(3000); // 简单的解决方案。

return(1); // 从函数中退出。

case 146:Alert("The trading subsystem is busy. Try again...");

Sleep(500); // 简单决定

return(1); // 从函数中退出。

// 严重错误

case 2: Alert("General error;)

return(0); // 从函数中退出。

case 5: Alert("旧版本的终端。")。

Work=false; // 不再工作

return(0); // 从函数中退出。

case 64: Alert("Account blocked.");

Work=false; // 不再工作

return(0); // 从函数中退出。

case 133:Alert("禁止交易。")。

return(0); // 从函数中退出。

case 134:Alert("没有足够的钱来执行交易")。

return(0); // 从函数中退出。

默认:Alert("An error has occurred",Error); // Other options

return(0); // 从函数中退出。

}

}

//-------------------------------------------------------------- 11 --

int New_Stop(int Parametr) // 检查停止刺。

{

int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//最小距离。

if (Parametr < Min_Dist) // 如果小于允许的范围。

{

Parametr=Min_Dist; // 设置公差。

Alert("停止距离增加;)

}

return(Parametr); // 返回值。

}