KimIV的有用功能 - 页 51

 
亲爱的伊戈尔,如果我冒犯了任何人,我深表歉意......我并不是真的在批评,很遗憾它看起来是这样。总之,发布的原型将被纠正和完善不止一次。所以不会有任何谜题(我从未假装是作者),今后我将把作品寄给你,供作者修改。我认为自己是第一步,到目前为止有25页。一旦我完成它,我将把它发送到你的网站上提到的地址。感谢你的宝贵工作和无私的经验分享!!。
 
rid писал (а)>>

我认为这是有可能的。显然,有必要在每个级别(交叉点)检查当前未结头寸的手数是多少。而正是根据这个标准,我们应该实施一个关闭机制 !

这类函数(返回手数)在该分支中可用。请看第。17 и 27

非常感谢您!万岁!现在我可以继续前进了,非常感谢!"。

 

为了确定是否需要在OpenPosition()函数中进行额外的手数检查,你需要看看你,如何计算手数以及在哪里调用;我在分支中没有看到这个函数

double ll=GetSizeLot()

也许我错过了

如果像这样计算,https://championship.mql5.com/2012/ru/news, 你可能会得到一个134的错误,并错过冠军 :-)

 

嗨,KimIV.发送了一件事,将不得不把它写回去。我不太擅长编程,而且我正在学习成为一名交易员,为期3周。我的语法也不怎么样。

这里。我的问题是这样的。 是否有可能使用CCi指标制作一个EA?

水平CCi 250,50,-50,-250。我们的想法是,当它分别达到(跨越)-50和50时,我将卖出或买入。考虑交易应该何时停止。

1然后(比方说有一笔买卖)图形穿过-250,然后它在相反的方向穿过-250(你可以在图片上看到)。

2 图中没有达到250,并交叉回到50。

对于购买来说,情况是一样的,但反之亦然。

报价欧元/美元,任何时间框架。

这样一个毛绒绒的EA需要多少钱????

如果是同样的价格,你能提供更好的东西吗?

提前感谢。我希望如此。好吧,我去上了一个外汇课程。

顺便说一下,外汇是一种真正的赚取面包和黄油的方式????

 

向大家问好。

发现了这个指标,对其进行了一些改变--构建了良好的趋势线。

炮制一个函数会很有趣...(这是一种KimIV的要求)。

附加的文件:
tlbs.mq4  8 kb
 
Prival писал(а)>>

关于。

OpenPosition("GBPJPY", OP_SELL, 0.1, pb+23*po, pb-44*po);

也许调用OpenPosition("GBPJPY",OP_SELL, 0.1, 23, 44)会更好。

这个建议,Sergei,增加了使用止损的便利性,并以点为单位进行设置。那么,由价格水平设定止损和止盈的情况呢?例如,停在前一栏的低点或高点。或者通过某种线路。是否在调用函数前将其转换为点数,并在函数中转换回价格?这是一个多余的操作。所以我将保持现状。

我们将在后面考虑GetSizeLot() 函数(顺便说一下,它现在被称为GetLots())。首先,我们需要完成使用b-ForTest.mqhb-Positions.mqh 库。

 

测试员的CountOrders()函数。

在我的测试(仅用于MT4的测试器)版本的Expert Advisors中,函数CountOrders() 取代了以下函数:ExistOrders(),ExistPositions(),NumberOfOrders()NumberOfPositions()。也就是说,它可以提供任何类型的头寸或订单的存在信息,以及每种类型的交易数量信息。这样的交易所有其自身的优势,表现在一次性参考一个tick的订单基础,并一次性获得所有必要的信息。而上述函数,特别是在一起使用时,它们中的每一个都是独立地与一个相同的订单基数一起工作,所以它们会重复进行相同的调用。因此,CountOrders() 函数可以将一次通过的时间减少几秒钟,从而可以节省几个小时的优化时间。

函数CountOrders()接受以下参数。

  • mo- 按类型划分的订单数量的数组。函数执行后,数组将有6(6)个元素。 元素 -买入 类型的交易数量,第一 元素 -卖出 订单的数量,第二 元素 -买入上限第三 元素 -卖出 上限,第四 元素 -买入 上限,第五 元素 -卖出 上限。
  • mn- 头寸或订单的标识符(MagicNumber)。默认值是-1 - 任何MagicNumber。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.08.2008                                                     |
//|  Описание : Рассчитывает количество ордеров по типам.                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mo - массив количества ордеров по типам                                 |
//|    mn - MagicNumber                          (-1 - любой магик)            |
//+----------------------------------------------------------------------------+
void CountOrders(int& mo[], int mn=-1) {
  int i, k=OrdersTotal();

  if (ArraySize( mo)!=6) ArrayResize( mo, 6);
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) {
      if ( mn<0 || OrderMagicNumber()== mn) mo[OrderType()]++;
    }
  }
}

P.S. 附上一个脚本,用于在线测试CountOrders()函数。

附加的文件:
 

下午好,伊戈尔和其他人也是。我在使用GetFractalBar(NULL,0,0)函数时遇到一个问题。- 它按其编号返回分形条数。更准确地说,问题不在功能上。但在它附近的某个地方。

用这种设置显示评论时,一切都很好。我在图表的角落里保存了条形图的编号。

int a;
... ...

int start()
  {
//----
if(Time[0] == prevtime)   return(0);//ждём нового бара
   prevtime = Time[0];//если появился новый бар , включаемся

if ( isFractalUp() > isFractalDn() )  {//если это Down-фрактал

   a = iLow(NULL,0, GetFractalBar(NULL,0, 0));
   
Comment( GetFractalBar(NULL,0, 0));            }

而当我在图表的角落里显示评论数字时,一切都很好。我看到左角有分形的条形的最小价格值。

if ( isFractalUp() > isFractalDn() ) {//если это Down-фрактал
   a = iLow(NULL,0, GetFractalBar(NULL,0, 0));

Comment(iLow(NULL,0, GetFractalBar(NULL,0, 0)));          }

但在一般情况下,进一步说是不清楚的!只要我在注释中插入变量 "a "而不是函数本身,注释就会在角落里返回1,而不是价格值!在这里:

if ( isFractalUp() < isFractalDn() ) {
   a = iLow(NULL,0, GetFractalBar(NULL,0, 0));
   Comment( a);                        }
我已经坐了三个小时了,我不明白什么是错的!请告诉我,如果你能....
 
Rita писал(а)>>
只要我在注释中插入变量 "a "而不是函数本身,注释就会在角落里返回1,而不是价格值 !

你已经将变量 "a "声明为一个整数变量,即

int a;

你应该把它声明为一个实数变量,即

双A。

 

测试员的ModifyOrder()函数。

这是第7页 公布的ModifyOrder() 函数的简化版,旨在改变一个预先选择的订单或头寸的绝对价格水平。

ModifyOrder() 函数接受以下参数。

  • pp- 订单设置价格。如果你传递一个小于或等于零的值,则不会对这个价格水平进行修改。默认值为-1
  • sl- 停止价格水平。如果你传递一个小于零的值,将不进行价格水平的修改。默认值为0
  • tp- 采取价格水平。如果你传递一个小于0的值,价格水平的修改将不会被执行。默认值为0
  • ex- 待定订单的到期日。默认值为0
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.03.2008                                                     |
//|  Описание : Модификация ордера. Версия функции для тестов на истории.      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена открытия позиции, установки ордера                            |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    ex - дата истечения                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er;
  double op=NormalizeDouble(OrderOpenPrice() , dg);
  double os=NormalizeDouble(OrderStopLoss()  , dg);
  double ot=NormalizeDouble(OrderTakeProfit(), dg);
  color  cl;

  if ( pp<=0) pp=OrderOpenPrice();
  if ( sl<0 ) sl=OrderStopLoss();
  if ( tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble( pp, dg);
  sl=NormalizeDouble( sl, dg);
  tp=NormalizeDouble( tp, dg);

  if ( pp!= op || sl!= os || tp!= ot) {
    if (MathMod(OrderType(), 2)==0) cl= clModifyBuy; else cl= clModifySell;
    if (!OrderModify(OrderTicket(), pp, sl, tp, ex, cl)) {
      er=GetLastError();
      Print("Error(", er,") modifying order: ", ErrorDescription( er));
      Print("Ask=",Ask," Bid=",Bid," sy=",OrderSymbol(),
            " op="+ GetNameOP(OrderType())," pp=", pp," sl=", sl," tp=", tp);
    }
  }
}
原因: