[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 529

 
删除了条形图,增加了从价格开始以X为增量的挂单,唯一剩下的是立即单独打开已关闭的订单,而不是等待所有4个订单关闭,以及根据资产百分比计算手数,帮助我解决这两个细微的问题。
这是它现在的样子。

//+------------------------------------------------------------------+
//| mo_bidir.mq4
//|在5M的时间框架内效果最好。
//+------------------------------------------------------------------+
#property copyright"Copyright © 2010 - Monu Ogbe"

#define MAGIC 1234
#define IDENT "mo_bidir"

外来的双倍数lot = 1。
外来的双倍止损 = 76; //
外来的双倍利润 = 750; //
extern int steps = 5; // Pending order step

int start(){

如果(OrdersTotal() == 0){
OrderSend(Symbol(), OP_BUY, lots,Ask, 3, Ask - stop_loss * Point, Bid + take_profit * Point, IDENT, MAGIC, 0, Blue) 。
OrderSend(Symbol(), OP_SELL, lots,Bid, 3, Bid + take_profit * Point, Ask - take_profit * Point, IDENT, MAGIC, 0, Red)。
OrderSend(Symbol(), OP_BUYSTOP, 0.5*lots,Ask+steps*Point, 3, Ask - stop_loss * Point, Bid + take_profit * Point, IDENT, MAGIC, 0, Blue) 。
OrderSend(Symbol(), OP_SELLSTOP, 0.5*lots,Bid-steps*Point, 3, Bid + take_profit * Point, Ask - take_profit * Point, IDENT, MAGIC, 0, Red) 。
}
return(0);
}
附加的文件:
 
belck:
在历史上寻找一个代码Breakeven。可能有。分享一下。 我有一个Breakeven代码,但它是在开放订单的基础上工作的。 我有一个EA,在相反的信号下关闭亏损的,在一个信号上打开。现在你需要有这个Breakeven代码来记住多少成亏损并传递信息,所以第二个等订单已经在图表上看到零利润线,考虑到过去的损失。专家顾问没有止损,这意味着亏损的交易将不会被止损平仓。




每次你把它移到所需的价格(收盘时的收支平衡),当你关闭一个订单并在下一个订单中看到旧价格时,不要删除它(线)。
 
belck:
想找一个历史收支平衡的代码。也许有人有,请分享。
我有一个Breakeven代码,但它是基于未平仓的订单。
当订单出现亏损时,我有一个很好的工作指令,当订单到达盈亏平衡点时,它应该打开。 考虑到之前的损失,订单已经看到了图表上利润线的零线。专家顾问没有止损,这意味着亏损的交易将不会被止损平仓。

如果我理解正确的话,你的问题的一部分是核算你的EA连续亏损交易的总损失,以便与当前市场订单的利润水平进一步比较,从而设定盈亏平衡线?
 
FAQ:

每次你把它移到所需的价格(收盘时的收支平衡),当你关闭订单并在下一个订单中看到旧价格时,不要删除它(线)。

这并不容易。

我自己无法实施。

我想让这条线出现在亏损的交易中,这样我就能在达到这条线的时候关闭。

也就是说,我需要一条只有在出现亏损订单时才会画出的线,但这条线将根据未平仓交易的手数和以前的亏损交易记录来画。
 
Roman.:
如果我理解正确的话,你问题的部分是考虑到你的EA连续亏损交易的总损失,并与当前市场订单的利润水平相比较,以设定盈亏平衡线? 。

我没有止损线,也就是没有止损和止盈

我想看到价格线,我必须在那里以这样的方式去关闭交易,以前关闭的订单是重叠的。

我需要在开始区块后面有一个区块,它将计数并将信息传递给开始区块,当它达到这个价格线时,我将使用这些信息来关闭交易。

 
你需要一个全局变量,把它变成一个全局终端,或者图形对象--那么它将只在这个图形上可见,如果需要的话,把它写到一个文件里,或者写到注册表里,或者直接写到内存里。有很多选择。
 
FAQ:
你需要一个全局变量,把它变成一个全局终端,或者图形对象--那么它将只在这个图形上可见,如果需要的话,把它写到一个文件里,或者写到注册表里,或者直接写到内存里。有许多变种。
这是你对我的回答吗?
 
belck: 但我不能靠历史本身写出盈亏平衡块。

这里是我的代码部分--负责核算这个特定EA的连续亏损交易的总损失(根据魔术师的说法)。我为我的变种网Avalanche制作了它--你可以根据你的需要编辑它--代码被注释出来了...

全局变量

double Current_Loss, Sum_Loss;     // текущий и суммарный убыток
int start()    // -----------------------СТАРТ ЭКСПЕРТА---------------
{

//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }
 //Print("Iteration at History = ",  Iteration, " Time_at_History_Current = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS),
 //      " Time_at_History_Previos = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
...
...
}// конец старт   

在这个代码部分之后,你还可以循环查看这个非常EA的未结订单,并计算其总利润。然后你将这个值与变量

Sum_Loss

并作出决定。

 
belck:
想找一个历史收支平衡的代码。也许有人有,请分享。
我有一个Breakeven代码,但它是基于未平仓的订单。
当订单出现亏损时,我有一个很好的工作指令,当订单到达盈亏平衡点时,它应该打开。 考虑到之前的损失,订单已经看到了图表上利润线的零线。专家顾问没有止损,这意味着亏损的交易将不会被止损平仓。

计算所有平仓交易的总利润,并将其保存在一个变量中,例如,TotalCloseProfit。然后使用下面这段代码,没有任何图形或其他设计。

if (TotalCloseProfit) < 0.0) { // Имеем убыток по закрытым позам
  if ((AccountEquity() + TotalCloseProfit) >= AccountBalance()) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
  }
}
 
utyff:


我看了一下日志。

这似乎是原因,但我不知道这意味着什么。谁能解释一下?以及如何解决这个问题?

这不是一个错误。日志中的错误用红色而不是黄色的图标标记。