[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 588

 
Beowulf:
你能建议一些文献让我 开始 并创建我自己的EA吗!?还是凡人无法做到的事情?)))
我们(凡夫俗子)做不到!;)))
 
lottamer:


1)它是可以理解的

2)刚刚检查过......在Alpari,你不能在开盘时设置止损,只能通过后续的修改......非交易台的费用。

3)有一个战略。


那么它就像你建议的那样简单。修改后,你设置一个复选框,并在修改前检查其状态。这是在有一个订单的情况下。如果多于一个,你需要自己核算订单。如何做到这一点是在文章部分。
 
TarasBY:
我们(凡人)不明白!;)))



我要读一读我的吸尘器))))。
 

您能否告知,当订单以展期方式重新开仓时,止损值和外卖值是否有滑移? 以及如果展期后的开仓价 和止损值之间的差额小于平仓的止损值,将如何设置止损?

我的任务如下。如果我有一个未平仓的市场订单,我应该检查它是否以展期方式开仓,如果是,我应该得到之前订单的票据,该订单已经关闭。也许有人会告诉我搜索算法? 我目前正在做以下工作。

1.我选择第一个开放的订单。
2.如果是在23:40到00:20开的,那么我继续进一步检查这个订单(40分钟的窗口是为了以防万一,虽然理论上你可以从23:50到23:59)
3。我记住了票据、止损和取价
4.我检查历史上所有已关闭的订单,其中评论包含交换一词,并且货币对匹配
5.我比较止损和接管的数据,如果它们匹配,这里就是所需的订单对,如果不匹配,我回到步骤1

 

答案已经找到了(个人),但我要把这个帖子留给历史!:))))

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

但这里有一个有趣的事情...

我有一个脚本(我从网上得到的)。它修改了一个开放的订单。

我的想法是把它作为一个整体,作为一个用户定义的函数插入我的专家顾问中,并在需要时调用它。

问题是,编译器给出了错误"'MB_OK'--变量未定义 G:\Program_Files_2\MT4-demo\experts\33.mq4 (153, 37)" --从结尾开始的第三行

但是,如果你编译脚本本身,一切就都清楚了!

我知道MV_OC是什么了......但我不明白为什么它在脚本中有效,但在专家顾问中却被警告了?

//+------------------------------------------------------------------+
//|                                               Изменить стопы.mq4 |
//|                                                          Мефодий |
//|                                                    ppc-2@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Мефодий"
#property link      "ppc-2@mail.ru"
#include <WinUser32.mqh>

extern  int  StopLoss = 500; 
extern  int  TakeProfit = 500;

// #property show_confirm
// #property show_inputs

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+

int start()
  {
        bool   result;
        double stop_loss,take_profit,point,bid,ask, lotsize;
        int    cmd, total, error, spread;
        string message;
//----
   total=OrdersTotal();

//----
   for(int i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         //---- print selected order
         OrderPrint();
         cmd=OrderType();
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         bid= MarketInfo(OrderSymbol(),MODE_BID);
         ask= MarketInfo(OrderSymbol(),MODE_ASK);
         spread=MarketInfo(OrderSymbol(),MODE_SPREAD);     
         //---- buy or sell orders are considered
         if(cmd==OP_BUY || cmd==OP_SELL)
          {
            //---- modify first market order
            while(true)
             {
                if(cmd==OP_BUY){
                        string type = "buy";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()-StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()+TakeProfit*point;
                }
                     
                else{
                        type = "sell";
                        if(OrderStopLoss()!=0)stop_loss=OrderStopLoss();
                        else stop_loss=OrderOpenPrice()+StopLoss*point;
                        if(OrderTakeProfit()!=0)take_profit=OrderTakeProfit();
                        else take_profit=OrderOpenPrice()-TakeProfit*point;
                }   
                result=OrderModify(OrderTicket(), OrderOpenPrice(), stop_loss, take_profit, 0, CLR_NONE);
                if(result!=true) { error=GetLastError(); Print("LastError = ",error);}
                else {error=0;}
                if(error==135) RefreshRates();
                else break;
              }
                if(error==0){
                        message=message+"Ордер #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+" успешно модифицирован.\n";
                        }
                        else{
                                if(error == 130){string error_desc = " - Неправильные стопы";} else error_desc = "";
                                if(error != 1)
                        message=message+"Ошибка модификации ордера #"+OrderTicket()+" - "+type+" - "+DoubleToStr(OrderLots(), 2)+". "+error_desc+" \n";
                        }

              //---- print modified order (it still selected after modify)
              OrderPrint();
              continue;             
           }
        }
      else { Print( "Error when order select ", GetLastError()); break;}
     }
        int ret=MessageBox(message, NULL, MB_OK);
        //if(ret==IDOK) return(0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

事实证明,#include <WinUser32.mqh>一行必须存在。

而这个文件是在include

 

让我吹吹牛...

你在修改的时候不需要任何标志。

在 "如果 "条件下就足够了(例如交叉平均)......参考使用函数BUY和MODIFY的括号{}。

这样一来,条件就会传播到两个行动中 :))

像这样

{My_buy()。

My_modify (); }

:))))))))))))))))))))))))

 

lottamer:

像这样

{My_buy()。

My_modify (); }

:))))))))))))))))))))))))

对程序代码如此松散的解释需要澄清。

    if (условие == true)
    {
        if (Tvoi_buy() == true)  // как вариант
        {Tvoi_Modify();}
    }
:)))
 
TarasBY:

对程序代码如此松散的解释需要澄清。

:)))


为什么?

而My_buy(一个非布尔变量)能否被检查为TRUE-FALSE?

修改是肯定的--订单是开放的--我们需要设置止损库存...

 
lottamer:

修改是肯定的--订单是开放的--你必须设置停止--高峰...

那你为什么把它放在大括号{ }里,如果(例如交叉平均数)?