[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 37

 
skyjet:

非常感谢您的回答!但是,如何描述Ask[0],Bid[0]之后的未来栏?

一旦这个未来柱出现,它就会变成零。而现在是[0]的酒吧将是[1]。


Ask和Bid不是数组,只有一个当前值,所有过去的值都被遗忘了

 


请帮助我理解押金的计算
,因为我的估计押金只有在所有订单完全锁定时才与终端
。当我在订单系统中增加一个订单时--押金
,终端的结果总是与我的估计押金相差很小
,但我永远无法做到弹指一挥间!
这里有一个非常简短的例子。

该账户有4个订单,每个10.00手,其中两个自行车
,两个卖出。很明显,账户处于平衡状态,所有的订单都被锁定
,我们计算每个订单的标准存款,除以4,一切都踮起脚尖
,终端正好敲击。

我们在1.4059的1.00手时再放一个byke
我们计算存款。很明显,为此我们必须支付标准押金
,因为所有现有的订单都在盒子里。
对于1:100的杠杆率,我们有新自行车的认捐

ZALBuy = 140.59*1.00 = 140.59

因此,以前的存款应该增加这一数额,
加上以前的存款和我们1.00字节的存款

ZAL=ZALold + ZALBuy = 1407.23 + 140.59 = 1547.82

在终端设置再见后,存款变成了1547.91
这将是可以接受的,如果我把再见比
,汇率1.4068高9个点,因为如果我们计算存款的实际增长
,作为存款前后的差异,我们得到的正是汇率1.4068,1.00手的标准存款

1547.91 - 1407.23 = 140.6801

改变了终端的版本,唉,没有帮助!

-----------------------------------------------

请原谅我占用你的时间,但这些
不断的小差异真的困扰着我
,因为我的机器计算不同的选项,
,而存款作为余额和利润是用来计算
,所有的账户参数 在某些行动后才实施
。所以准确性在这里是非常理想的。
也许我有不明白的地方,但我搜索了一下文件
,没有找到这种差异的原因。
我将非常感谢您的帮助!


尊敬的MADZX先生
 
keep87:


你可以忘记这个设置。重新引用发生,如果食堂想拿你的钱,他们不在乎差距是什么,反正他们会这样做)。这就是自动交易的现实,大多数自称是 "最好的经纪人XXXX"(XXXXX--插入一个大陆或星系的名字,等等)的骗子公司

改变或不改变设置,一切都保持不变。


完全正确!我也见过它 !
 
skyjet:
你好!你能给我一个真正的酒吧+1的描述吗?例如,我需要下一栏的价格,而不是现在的价格。

据我所知,你是想从未来的机器中获取信息。
如果你找到一个方法--分享,我将不胜感激 :)
 
Kobalerro:
向大家问好。我自己是编程新手,所以请解决这个问题。

同一个账户上的多个EA,有必要开设有限的订单数量。

例如:10个EA,但只能开5个订单,但每个货币对不能超过一个。

这一点已经实现了,但它并不是这样工作的。

extern int МаксКолОрдеров   = 5;

//+------------------------------------------------------------------+

int ПодсчетОткрОрдеров() {
  int k=OrdersTotal();
   if (Символ=="0") Символ=Symbol();
    for (int i=МаксКолОрдеров; i<k; i++) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==Символ || Символ=="") {
       if (МагикНомер<0 || OrderMagicNumber()==МагикНомер) {
      if (OrderMagicNumber()<1) return(True);
     }
    }
   }
  }
 return;

}

//+------------------------------------------------------------------+
int start()
  {
   if(ПодсчетОткрОрдеров()==0)ПровТоргУсловий();
   }


我将按以下方式实现这样的表演:
你的10匹马都在按自己的时间表工作,就像在相邻的房间里一样
,因此没有一匹马知道墙后的邻居在做什么--这是你的想法的主要问题
!
因此,我将指示每个EA将他们的行动写进磁盘文件
,该文件将被所有马匹使用,因为它在终端的目录中。
如果他们中的任何一个人有一个强烈的愿望,要在他们的窗口
,应该首先分析这个文件,并检查实施的可能性
希望 !
就你的情况而言,你需要在文件中加入订单的数量
和货币对的数量
。例如:
EURUSD 1
GBPUSD 1
EURGBP 0

这里我们看到,我们不能在欧元兑美元英镑兑美元 上开立交易,因为脚本不允许
,每个货币对有一个以上的订单。
很明显,有多少个货币对在工作,就会有多少行。
有了这个解决方案,你的所有马匹将始终知道此刻发生了什么
,并能计算出此刻是否允许任何行动。
当你在任何货币对上设置订单时,你必须在右边的行中输入1
当你关闭它时,将其替换为0
这肯定会奏效,尽管对于一个新手来说有点复杂
。但请继续,因为每个人都在那里 - 像一个新手一样直到时机到来

祝您狩猎愉快!
MADZX

 

我正在写一个回撤策略。我需要在相应蜡烛的极值以上(以下)放置一个止损单。下面是一个例子。

很明显,如果收盘价低于开盘价,就是看跌的蜡烛,反之,就是看涨的蜡烛。我想知道如何制造一个条件,说之前的蜡烛是看涨的。...某某某。

从逻辑上讲,我做了一个函数,可以确定蜡烛的类型。

int CandleType()
{
  if(Open[1] > Close[1])
    return(BullCandle);
    
  if{Open[1] < Close[1]}
    return(BearCandle);
    
  return(dodji);
}

然后,你应该以某种方式询问指数为1的柱子是看涨还是看跌......。...做一些事情...

我怎么做呢?

 
madzx:


我会这样实现这样的节目:
,你的10匹马都在按照自己的时间表工作,就像在相邻的房间里一样
,因此没有一个人知道墙后的邻居在做什么--这是你的想法的主要问题

因此,我将指示每个EA将他们的行动写入一个磁盘文件
,这个文件将被所有马匹使用,因为它在终端的目录中。
如果他们中的任何一个人有一个强烈的愿望,要在他们的窗口
,应该首先分析这个文件,并检查实施的可能性
希望 !
就你的情况而言,你需要在文件中加入订单的数量
和货币对的数量
。例如:
EURUSD 1
GBPUSD 1
EURGBP 0

这里我们看到,我们不能在欧元兑美元英镑兑美元 上开立交易,因为脚本不允许
,每个货币对有一个以上的订单。
很明显,有多少个货币对在运行,就会有多少行。
有了这个解决方案,你的所有马匹将始终知道此刻发生了什么
,并能计算出此刻是否允许任何行动。
当你在任何货币对上设置订单时,你必须在右边的行中输入1
当你平仓时,将其替换为0
这肯定会奏效,虽然对新手来说有点复杂
。但请继续,因为每个人都在那里 - 像新手一样直到时机到来

祝您狩猎愉快!
MADZX

谢谢你的提示,但这有点太复杂了。然后在你的版本中,它变成了所有的工作,它需要10个检查条件来进入。

但它们只打开及时赶到的前五个,然后,当其中一个关闭时,第一个符合条件的就会再次打开。

不限于EURUSD 1 , GBPUSD 1 , EURGBP 0.

我认为应该有一个更简单的解决方案。它应该类似于按给定参数计算具有限制条件的订单 总数。

而这个限制可以通过一个符号或一个不超过1的神奇数字来设定。

虽然你的版本可能也能工作,但我无法决定如何在代码中实现它。

 
hoz:

我这里有一件奇怪的事情。这里是开仓单的功能。

这里有一个错误。

if(SL < g_stopLevel)
    SL = g_stopLevel*pt;

如果止损水平=5,那么你就想把止损放在0.00005。

第二个错误是你没有检查你下单的位置。 如果蜡烛图在其高点低点附近收盘,你会得到错误130。 正如你在图片中看到的,服务器开了一个卖单而不是止损单,因为你试图在一个高于或等于当前价格的价格开一个止损单。

学习使用印刷品。只要把Print();放在正确的地方,把所需的变量放在括号里,用这个来分隔。像这样:Print(Price," ",SL); 在测试过程中,在 "专家 "选项卡中打开一个订单的时刻,你将看到这些变量等于什么,你将能够理解什么是错的。

日志还将显示EA试图做什么,在哪里设置止损和止盈。你会在那里看到你需要的一切。

从逻辑上讲,我做了一个函数,可以检测蜡烛的类型。

让我们在函数start里面工作。

首先,我们创建一个变量,在这个变量中我们将写出前一个蜡烛的方向。

int Candle=-1;

我们将用一些数值来填充它,其中一个表示看涨,另一个表示看跌。 如果是-1,它就什么都不是(它还没有被确定或者它没有方向close=open)。

我建议通过类比交易订单来使用这个值,0-买入,1-卖出。

那么我们就需要写。

如果(Close[1]>Open[1]) Candle=0; else
if(Close[1]<Open[1] Candle=1;

现在我们已经定义了一个方向,我们可以直接在OrderSend( string symbol,int cmd, ...other stuff...)函数 中使用它。

if(Candle!=-1) OrderSend( Symbol(),Candle, ...其他东西...)。

或者按照你的比喻。

if(Candle==0) OpenBuy();
if(Candle==1) OpenSell();

 
Kobalerro:

谢谢你的提示,但这有点太复杂了。然后发现所有的人都在你的变体中工作,而且需要10个来检查进入条件。

而且他们只先打开5个已经赶上的,然后当其中一个关闭时,第一个符合条件的就会再次打开。

不限于EURUSD 1 , GBPUSD 1 , EURGBP 0。

我认为应该有一个更简单的解决方案。它应该像按给定参数计算具有限制条件的订单总数。

而我们需要用一个符号或者一个神奇的数字来限制这个数字,或者不超过一个。

虽然,也许你的方案也会奏效,但如何在代码中实现它,我想不出。


或者也许像这样:

if(NumberOfPositions("EURUSD")==0 && NumberOfPositions()<10)
而这里的函数
 
keep87:

这里有一个错误。

如果止损水平=5,那么你试图将止损放在0.00005。

第二个错误是你没有检查你下单的位置。 如果蜡烛图在其高点低点附近收盘,你会得到错误130。 正如你在图片中看到的,服务器开了一个卖单而不是止损单,因为你试图在一个高于或等于当前价格的价格开一个止损单。

学习使用印刷品。只要把Print();放在正确的地方,把所需的变量放在括号里,用这个来分隔。像这样:Print(Price," ",SL); 在测试过程中,在 "专家 "选项卡中打开一个订单的时刻,你将看到这些变量等于什么,你将能够理解什么是错的。

日志还将显示EA试图做什么,在哪里设置止损和止盈。它将显示所需的一切。

我时常这样使用它。看,现在的函数看起来像这样。

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy()
{
  int ticket = -1;
  string myNote = "Сов баянул";
  
  double price = High[1] + i_thresholdFromInput*pt;
  Print("price = ", price);
  double SL = Low[1] - i_thresholdFromBasedSL*pt ;
  Print("SL = ", SL);

  if(price > Ask)
  {
    ticket = OrderSend(Symbol(),OP_BUYSTOP,0.1,NormalizeDouble(price,Digits),i_slippage,0,0,myNote,i_myMagic,TimeCurrent() + 600,Navy);
  }
  
  if(ticket > 0 && OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
    if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),NormalizeDouble(High[1] + i_tp*pt,Digits),0,Navy))
    return(false);
  
  return(true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell()
{
  int ticket = -1;
  string myNote = "Сов шортанул";
  
  double price = Low[1] - i_thresholdFromInput*pt;
  Print("price = ", price);
  double SL = High[1] + i_thresholdFromBasedSL*pt;
  Print("SL = ", SL);
  
  if(price < Bid)
  {
    ticket = OrderSend(Symbol(),OP_SELLSTOP,0.1,NormalizeDouble(price,Digits),i_slippage,0,0,myNote,i_myMagic,TimeCurrent() + 600,Red);
  }
  
  if(ticket > 0 && OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) == true)
    if(!OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,Digits),NormalizeDouble(Low[1] - i_tp*pt,Digits),0,Red))
    return(false);
    
  return(true);
}

我在日记中读到。

2012.12.25 18:20:16     2012.02.13 00:05  5_minites_TS_by_Philippe Nell EURUSD,M5: modify #1 buy stop 0.10 EURUSD at 1.32103 sl: 1.32007 tp: 1.32243 ok
2012.12.25 18:20:16     2012.02.13 00:05  5_minites_TS_by_Philippe Nell EURUSD,M5: open #1 buy stop 0.10 EURUSD at 1.32103 ok
2012.12.25 18:20:16     2012.02.13 00:05  5_minites_TS_by_Philippe Nell EURUSD,M5: SL = 1.3201
2012.12.25 18:20:16     2012.02.13 00:05  5_minites_TS_by_Philippe Nell EURUSD,M5: price = 1.321
2012.12.25 18:20:14     2012.02.13 00:00  5_minites_TS_by_Philippe Nell EURUSD,M5: OrderSend error 130
2012.12.25 18:20:14     2012.02.13 00:00  5_minites_TS_by_Philippe Nell EURUSD,M5: SL = 1.3194
2012.12.25 18:20:14     2012.02.13 00:00  5_minites_TS_by_Philippe Nell EURUSD,M5: price = 1.3204
2012.12.25 18:20:14     5_minites_TS_by_Philippe Nell inputs: i_fastMaPeriod=10; i_slowMaPeriod=21; i_filtrMaPeriod=50; i_trading_TF=5; i_thresholdFromInput=1; i_thresholdFromBasedSL=1; i_slippage=3; i_tp=15; i_myMagic=33330215; 
2012.12.25 18:20:12     5_minites_TS_by_Philippe Nell EURUSD,M5: loaded successfully

因此,最初从买入价到停止价的差额为1.3204-1.3194=0.001

进一步的1.3210 - 1.3201 =0.009

而在第二种情况下,由于某种原因,止损点更接近于进场价格,但并没有出现错误!在这种情况下,我们的止损点就会出现。我想了想,不明白。

我后来以不同的方式纠正了这个错误。代码中已经有了条件。

if(price > Ask) && if(price < Bid) 分别用于购买和出售还是有另一种变体?现在我们已经没有错误了。但是,尽管如此,我还是想听听一个更有经验的程序员的意见