KimIV的有用功能 - 页 71

 
你需要对上层和下层的分形 分别进行编号。在函数参数中,指定UPPER或LOWER类型和分形数。顺便说一下,如果你在搜索之字形拐点时也对上下结点分别进行编号,使用起来会更方便。
 
KimIV писал(а)>>

是的,没有...因为我无法决定如何给这种分形编号。

如果像这样的东西不算是分形的形成呢。一个选择?

 
Kombat.我不同意这个选项。事实上,只要有两个分形出现在同一根柱子上,就是著名的数字 "透镜 "的标志,有时也称为 "钻石"。因此,这个数字可以通过这个符号在专家顾问中捞出来。
 
向Docs和Igor提问 = 是否有可能在一个独立的时间窗口中建立 "利润 "或 "资金 "指标作为连续线(不同的Т/F)(意思是 - 控制投资组合的动态表现)?不幸的是,在伊戈尔的网站上有一个指标,但它是以表格和静态的形式......(或者也许有一个--给我一个链接) ....
 
khorosh писал(а)>>
Kombat.我不同意这个选项。事实上,只是当一个条形上有两个分形时,它是一个著名的数字 "透镜 "的标志,有时被称为 "钻石"。因此,这个数字可以通过这个符号在专家顾问中捞出来。

对于定义来说是的,但对于编号来说,这就是它的目的......。

 
nuj >> :
向Docs和Igor提问 = 是否有可能在一个独立的时间窗口中建立一个 "利润 "或 "资金 "指标作为连续线(不同的Т/F)(意思是 - 控制投资组合的动态表现)?不幸的是,在伊戈尔的网站上有一个指标,但它是以表格和静态的形式......(或者也许有一个--给我一个链接) ....

通过论坛搜索

附加的文件:
equity_v7.mq4  17 kb
 

并询问你是否有一个顾问,。

1.拿起所有开放的职位。

2.在无损失处设置止损。

3.拖网

4.关闭 三个层次的职位,例如:。

地段等同于1。

出场1 - 50%的手数被平仓,例如从开盘价起30点。

2路出局 - 30%的手数被关闭,例如开盘价的70点。

3条出路--20%的地段是封闭的,比如说在MA路口。

谢谢你。

 

下午好,请您告诉我如何在这个简单的专家顾问中实现NumberOfBarOpenLastPos函数。

这样,每条街就会触发一次订单...... 我在代码中加入了这个功能,但没有任何效果......

//--------------------------------------------------------------------
// tradingexpert.mq4
//
//--------------------------------------------------------------------
#property copyright"Copyright © Book, 2007"
#属性链接 "http://AutoGraf.dp.ua"
//--------------------------------------------------------------- 1 --
// M15的数值
外部双数 StopLoss =200; // 正在开仓的订单的SL。
外部双数TakeProfit =10; // 正在开仓的订单的TP。
Extern intern Period_MA_1=11; // Period MA 1
extern int Period_MA_2=31; // Period MA 2.
外部双倍Rastvor =28.0; // MAs之间的距离。
extern double Lots =0.1; // 固定的手数。
外部双倍Prots =0.07; // 自由资金的百分比

bool Work=true; // 专家顾问将工作。
string Symb; // 金融工具的名称
//--------------------------------------------------------------- 2 --
int start()
{
䵮䵮
总数, // 窗口中的订单数
Tip=-1, // 选择的订单类型(B=0,S=1)。
Ticket; // 订单号

MA_1_t, // 值。MA_1当前值
MA_2_t, // MA_2_t值。MA_2_t current value, // MA_2_t value。
Lot, //Lots number 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 --
// 贸易标准
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_2

如果(MA_1_t > MA_2_t + Rastvor*Point) // 如果两者之间的差异
{ // ...MA1和2是大的
Opn_B=true; // 打开购买标准
Cls_S=true; // 关闭标准出售
}
如果(MA_1_t < MA_2_t - Rastvor*Point) // 如果两者之间的差异
{ // ...MA_1和2是大的
Opn_S=true; //打开卖出准则
Cls_B=true; //点击标准购买
}
//--------------------------------------------------------------- 6 --
// 关闭订单
while(true) //Order closing loop.
{
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); // 收盘卖出
如果(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手的价值
Step =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 --
//公开订单
如果(NumberOfBarOpenLastPos()>0){
while(true) // 关闭订单循环。
{
if (Total==0 && Opn_B==true) // 没有未结订单
{ //开放购买标准。
RefreshRates(); // 更新数据
SL=Bid - New_Stop(StopLoss)*Point; //计算SL的开盘价
TP=Bid + New_Stop(TakeProfit)*Point; //计算TP的开盘。
Alert("Attempting to open Buy. Waiting for reply...")。
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//打开买入。
if (Ticket > 0) // 它成功了 :)
{
警报("买入订单打开",Ticket;)
return; //退出订单
}
如果(Fun_Error(GetLastError())==1) //错误处理
continue; // retry
return; // 从start()退出。
}
if (Total==0 && Opn_S==true) // 没有未结订单
{ //开放销售标准。
RefreshRates(); // 更新数据
SL=Ask + New_Stop(StopLoss)*Point; //计算SL的开盘。
TP=Ask - New_Stop(TakeProfit)*Point; // 计算TP的开盘。
Alert("Attempting to open Sell. Waiting for reply...")。
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Open Sel.
if (Ticket > 0) // 它成功了 :)
{
警报("卖出订单打开",Ticket;)
return; // 从start()中退出
}
如果(Fun_Error(GetLastError())==1) //错误处理
continue; // retry
return; // 从start()退出。
}
break; // Exit while
}
}
//--------------------------------------------------------------- 9 --
return; //exit while; //start()
}
//-------------------------------------------------------------- 10 --


//+----------------------------------------------------------------------------+
//| Author : Kim Igor V. aka KimIV, http://www.kimiv.ru |。
//+----------------------------------------------------------------------------+
//| 版本号 : 19.02.2008||
//| 说明:返回最后开仓的条数或-1。
//+----------------------------------------------------------------------------+
//| 参数: |
//| sy - 工具的名称(""或NULL - 当前符号)。
//| tf - 时间框架 ( 0 - 当前时间框架) ||
//| op - 操作 ( -1 - 任何位置) | |
//| mn - MagicNumber ( -1 - any magic number) | |
//+----------------------------------------------------------------------------+
intOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
datetime t;
int i, k=OrdersTotal();

如果(sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
如果(OrderSymbol()==sy){
如果(OrderType()==OP_BUY || OrderType()==OP_SELL) {
如果(op<0 || OrderType()==op){
如果(mn<0 || OrderMagicNumber()==mn) {
如果(t<OrderOpenTime())t=OrderOpenTime()。
}
}
}
}
}
}
返回(iBarShift(sy, tf, t, True))
}

int Fun_Error(int Error) // 错误处理函数
{
switch(Error)
{ // 可以避免的错误。
case 4: Alert("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); // 返回值。
}
//-------------------------------------------------------------- 12 --

 
kurilko >> :

// 开启订单

如果(NumberOfBarOpenLastPos()>0)

该函数只有在开仓的情况下才会返回大于0,如果不是-1则跟随...

如果(NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-)

{

}

 

将条件改为如果(NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1)

还是不行,也许需要在代码的其他地方写上?