[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 369

 
颜色MA 奥尔洛瓦。
 
谢谢你
 

我在弄清交易功能 方面仍有困难,但我对编程有一定的了解。

在你的帮助下,我可以实现这种算法,这对我有好处。

如果(购买条件)

如果有一个开放的订单

如果该订单是在触发了买入条件的货币对上。

如果它是一个卖出指令

关闭它

打开一个买入订单。

帮我写一下吧,我都快累死了。 我读了很多书,还不能理解。

 
frxmax:

我在弄清交易功能方面仍有困难,但我对编程有一定的了解。

在你的帮助下,实现这种算法对我来说是件好事。

1.如果(购买条件)

2. 如果有一个开放的订单

2.1. 如果该订单是在买入条件被触发的货币对上

2.2. 如果是卖出指令

3.关闭它

4. 开立一个买入订单。

帮我写一下吧,我都快累死了。 我读了很多书,但还是不明白。


1.购买的条件是什么?

2.我们通过终端的市场订单做一个循环

2.1 在循环中(第2点),我们检查所选订单 是在哪一对上打开的,如果是正确的,那么......。

2.2. 检查所选订单的类型,如果是卖出......。

3.关闭所选订单

打开买入订单

还是你完全需要这些代码?这不是一种帮助,而是一种看跌的青睐。然而......。如果它不工作 - 我会写,但没有问题......

 

是的,我写过,也帮助过。在这个问题上,"每个人都有自己的真理"。

这是我的版本

if (LoCurent>LoPrevious && FtCurent>FtPrevious)
      {
       ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Bid-StopLoss*Point,Bid+TakeProfit*Point,"Buy",1111,0,Green);
       if(ticket>0)
          {
           if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
          }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
      }
// условие ПРОДАЖИ 
   if(LoCurent<LoPrevious && FtCurent<FtPrevious)
       {
        ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,"Sell",2222,0,Red);
        if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
        else Print("Error opening SELL order : ",GetLastError()); 
        return(0); 
        }    
    return(0);
 // ЗАКРЫТИЕ СДЕЛОК
 for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
           if(LoCurent<LoPrevious || FtCurent<FtPrevious || LoCurent<-30 || LoPrevious<-30)
               {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
               }
           }else
               {
                 if(LoCurent>LoPrevious || FtCurent>FtPrevious || LoCurent>30 || LoPrevious>30)
                  {
                     OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                     return(0); // exit
                  }
                }
     }
        
     
 }
 

}

下面是KONDOR的版本

if(LoCurent<LoPrevious)
     if(CalculateOrders(Symbol(),OP_SELL)>0) Ord_Close(Symbol(),OP_SELL);
     if(total<1)
     Ticket(OP_BUY);          }

//-----------------------
int CalculateOrders(string simbol,int type)
  {
   int count=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==simbol)
        {
         if(OrderType()==type)  count++;
        
        }
     }
     
 return(count);
  }

//---------------------

void Ord_Close(string simb,int type) {  double price;
   
   if(type==OP_BUY)  price=MarketInfo(simb, MODE_BID); else
   if(type==OP_SELL) price=MarketInfo(simb, MODE_ASK);

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if( OrderSymbol()!=simb || OrderMagicNumber()!=111) continue;
      //---- check order type 
      if(OrderType()==type)
        {  OrderClose(OrderTicket(),OrderLots(),price,3,White);   break;  }
        
        
     }   
     
     
 } 
//-----------------------------

int Ticket(int op){
      double pp = MarketInfo(Symbol(), MODE_POINT);
      double pBid = MarketInfo(Symbol(), MODE_BID);
      double pAsk = MarketInfo(Symbol(), MODE_ASK); 
      double open_price;
      double T;
      color col=NULL;
      int mn=0;
      
  if(op==0) {open_price=pAsk; col=Blue; T=pAsk+TakeProfit*pp;}
  if(op==1) {open_price=pBid; col=Red;  T=pBid-TakeProfit*pp;}
  int res=OrderSend(Symbol(),op,Lot,open_price,1,Bid-StopLoss*Point,Bid+TakeProfit*Point,NULL,mn,0,col); 

   return(res);               
 }
 

在满足开单条件的情况下,EA仍然在每次价格变化时开仓交易。

另一个问题是反向信号下的平仓单(在有卖出信号时覆盖买单,反之亦然)。

 
frxmax:

当满足开单条件时,专家顾问仍然在每次价格变化时开仓交易。

还有一个问题是反向信号的平仓单(在收到卖出信号时覆盖买入订单,反之亦然)。

这是另一种方法。写一个职责范围(如Sergeev和Composter所要求的)。然后得到一个有效的代码。事实上,所有的问题都有一个解决方案。而且不止一次被贴在这个论坛上。
 

大家好。听说过外汇,但没有深入了解,我知道C语言编程的基本知识。

我想学习如何编写能产生收入的外汇机器人程序。

我真的能靠这个赚钱吗?开始工作的最低前提条件是什么?我需要学习什么?

 
Vinin:

还有另一种方法可以做到这一点。编写职责范围(如Sergeev和Composter所要求的)。然后得到一个有效的代码。事实上,所有的问题都有一个解决方案。而且不止一次地在论坛上阐述。
我对任务的职责 范围理解得没错吧?
 
frxmax:

1.当打开订单的条件得到满足时,顾问仍然在每个价格变化上打开交易。

2.另一个问题是反向信号下的平仓单(在有卖出信号时覆盖买单,反之亦然)。

先决条件。

1.如果有条件开单(买入);如果没有开单(买入),开一个买入单。同样,对于卖出

2.如果有条件打开一个买入订单,如果有一个开放的卖出订单 - 关闭卖出。

因此,我们得到。

1.如果有一个信号,打开一个买入->>订单

2.如果有一个开放的卖出订单->。
2.1 关闭它。

3.如果没有开放的买入订单-> 3.
3.1 打开它。

同样,对于卖出