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

 
NameLess:


你可能已经注意到了,真正的原因不是为了看代码,而是为了了解它是如何工作的。如果你信任专家顾问,我祝你成功,一切都会好起来的)

我个人发明了一辆自行车,并从头开始写我的猫头鹰,但我知道事情在哪里以及如何运作,并知道为什么它们不工作,以及在哪里寻找错误)

仅此而已)


谢谢你。我已经在正确的轨道上了!))))。我不得不四处挖掘,但我实现了我想要的东西(至少它以某种方式工作:))。).
 
NameLess:
你知道如何设置订单号控制吗?我同意,这个问题可能会带来毫不掩饰的微笑,在某些地方会变成笑声))))。但我在mt-sh代码方面只摸索了大约一个星期。我仍然不知道所有的单词 ))))聪明)))
 
nemo811:
你知道如何设置订单号控制吗?我同意,这个问题可能会引起毫不掩饰的微笑,在一些地方变成笑声))))。但我在mt-sh代码方面只摸索了大约一个星期。我仍然不知道所有的单词 ))))聪明)))


我不能说自己是专家))))。

我不太清楚数字控制是什么意思? 如果你需要在某些条件下开两次单,你需要创建这个条件。

总的来说,我大约在半年前开始写自己的程序,一个简单的细节帮助了我:想一想你想让EA做什么,或者一个具体的代码。

在这种情况下,举个例子可能更容易,然后我就能更具体地说,如果我知道解决方案,该怎么做,怎么做:)

 

第83页的例子,任务来自sergeev

代码起作用了 - 谢谢你。但是当有经验的人说这样的话时,你就会开始想,到底出了什么问题。

)))

 
nemo811:

第83页的例子,任务来自sergeev

代码起作用了 - 谢谢你。但是当有经验的人说这样的话时,你就会开始想,到底出了什么问题。

)))


如果代码做了它应该做的事--那么就是这样)))我的意思可能是,代码可以不停地打开订单,但我们这样做是为了让所有东西都打开并延期一次。所以它是可以的)
 
NameLess:

如果代码做了它应该做的事,那就没问题))我的意思可能是,代码可以不停地开单,但我们每次开单和延期都做了一次)。

很好。再次感谢你们。
 
nemo811:

顺便说一下,我建议把类似于

if ( OrdersTotal()!=0)

{

BUY = false;

BUY_STOP = false;

BUY_LIMIT = false;

SELL = false;

SELL_STOP = false;

SELL_LIMIT = false;

}

这是在你有未结头寸 的情况下的一种保护,以防你需要重新启动客户端,否则它将重新打开整个订单批。

我还建议问:从逻辑上思考每一条线--什么可以阻止它工作。

 
nemo811:

这是我目前正在做的一个稍微过时的版本。作者drknn 允许我上传。


他不只是允许把它放在那里,他还公开允许随心所欲地改变代码,出售它,甚至把它的版权给你想要的人:)

只是不要在那里为权利而发生争执 :)

 
谢谢你
 
NameLess:

顺便说一下,我建议把类似于

if ( OrdersTotal()!=0)

{

BUY = false;

....

这是在你有未结头寸的情况下的一种保护措施,以防你需要重新启动客户端,否则,它将重新打开整个订单批次

谢谢你--这是一个重要的观点。我已经解决了这个问题,并添加了计数器(感谢sergeev),用于计算订单。

现在的代码看起来如下(它在重启终端时不会打开不必要的数据)。

//--------------------------------------------------------------------
extern int     MAGIC       = 0;        //уникальный номер ордера
extern bool    BUY         = false;    //открыть ордер BUY
extern bool    BUY_STOP    = false;    //поставить ордер BUY STOP
extern bool    BUY_LIMIT   = false;    //поставить ордер BUY LIMIT
extern bool    SELL        = false;    //открыть ордер SELL
extern bool    SELL_STOP   = false;    //поставить ордер SELL STOP
extern bool    SELL_LIMIT  = false;    //поставить ордер SELL LIMIT
extern double  Lot         = 0.1;      //объем ордера
extern int     takeprofit  = 0;        //уровень выставления TP, если 0, то TP не выставляется
extern int     stoploss    = 0;        //уровень выставления SL, если 0, то SL не выставляется
extern int     DistanceSet = 40;       //расстояние от рынка для отложенника
extern int     Proskalz    = 3;        //максимально допустимое отклонение цены для рыночных ордеров
//--------------------------------------------------------------------
double SL,TP;
//--------------------------------------------------------------------
int start()
{
   if (BUY)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy");
      BUY=false;
   }
   if (SELL)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell");
      SELL=false;
   }
   if (BUY_STOP)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask + DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask + DistanceSet*Point - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy Stop");
      BUY_STOP=false;
   }
   if (SELL_STOP)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid - DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid - DistanceSet*Point + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell Stop");
      SELL_STOP=false;
   }
   if (BUY_LIMIT)
   {
      if (takeprofit!=0) TP  = NormalizeDouble(Ask - DistanceSet*Point + takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL  = NormalizeDouble(Ask - DistanceSet*Point - stoploss*Point,Digits); else SL=0;     
      OPENORDER ("Buy Limit");
      BUY_LIMIT=false; 
   }
   if (SELL_LIMIT)
   {  
      if (takeprofit!=0) TP = NormalizeDouble(Bid + DistanceSet*Point - takeprofit*Point,Digits); else TP=0;
      if (stoploss!=0)   SL = NormalizeDouble(Bid + DistanceSet*Point + stoploss*Point,Digits);  else SL=0;              
      OPENORDER ("Sell Limit");
      SELL_LIMIT=false;
   }
return(0);
}
void OPENORDER(string ord)
{
   int SchBuy=SchBuy_b(MAGIC);
   int SchSell=SchSell_b(MAGIC);
   int SchBuyStop=SchBuyStop_b(MAGIC);
   int SchSellStop=SchSellStop_b(MAGIC);
   int SchBuyLimit=SchBuyLimit_b(MAGIC);
   int SchSellLimit=SchSellLimit_b(MAGIC);
   int ticket = -1;
   int err;
   while (ticket<0)
   {
      if (SchBuy<1) {if (ord=="Buy") ticket=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchSell<1) {if (ord=="Sell") ticket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchBuyStop<1) {if (ord=="Buy Stop") ticket=OrderSend(Symbol(),OP_BUYSTOP, Lot,NormalizeDouble(Ask + DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchSellStop<1) {if (ord=="Sell Stop") ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchBuyLimit<1) {if (ord=="Buy Limit") ticket=OrderSend(Symbol(),OP_BUYLIMIT, Lot,NormalizeDouble(Ask - DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}
      if (SchSellLimit<1) {if (ord=="Sell Limit") ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(Bid + DistanceSet*Point,Digits),Proskalz,SL,TP,"",MAGIC,0);}      
      if (ticket==-1) //неудачная попытка
      {  
         ShowERROR();
         err++;Sleep(2000);RefreshRates();
      }
      if (ticket || err >10) return;
   }
return;
}                                    
//--------------------------------------------------------------------
void ShowERROR()
{
   int err=GetLastError();
   switch ( err )
   {                  
      case 1:   return;
      case 2:   Alert("Нет связи с торговым сервером ",Symbol());return;
      case 3:   Alert("Error неправильные параметры ",Symbol());return;
      case 130: Alert("Error близкие стопы   Ticket ",Symbol());return;
      case 134: Alert("Недостаточно денег   ",Symbol());return;
      case 146: Alert("Error Подсистема торговли занята ",Symbol());return;
      case 129: Alert("Error Неправильная цена ",Symbol());return;
      case 131: Alert("Error Неправильный объем ",Symbol());return;
      case 4200:Alert("Error Объект уже существует ",Symbol());return;
      default:  Alert("Error  " ,err," ",Symbol());return;
   }
}

+ 适当的计数器。

谢谢你。