初学者的问题 MQL4 MT4 MetaTrader 4 - 页 27

 
Movlat Baghiyev:
平仓条件使用反向信号,但它不起作用,我们的交易只在止损或止盈时平仓。 你的理由是什么?

错了。
你的条件应该在开始时,关闭功能在开始后。

int i;
// 
void Start(){

if ((FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) // тут так надо бы Bid<NormalizeDouble(FMA1-Distanse*GetPoint(),Digits)
   || (FRMA1>GrossMA1 && FRMA2<GrossMA2  &&  Ask>FRMA1+Distanse*GetPoint())){
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL)  CloseOpBuySell(); // тут закроются все ордера и бай и селл
    }
  }

}// end start

void CloseOpBuySell()

for(i=0;i<OrdersTotal();i++) 
  { 
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
   { 
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic ) //свой магик
    { 
      if(OrderType()==OP_BUY
        { 
         if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,LawnGreen);  {continue;}
        } 
      if(OrderType()==OP_SELL
        { 
         if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,LawnGreen);  {continue;}
        } 
      } 
    } 
  } 
  return;
  }

如果你必须在不同的条件下关闭,而不是一次全部关闭,那么关闭函数应该是不同的。
 
Natashe4ka:

错了。
你应该把条件放在开头,把关闭函数放在开头。

如果你需要按个别条件关闭,而不是一次全部关闭,那么关闭的功能应该是不同的。

对,但我已经做了,并发给了他,所以他不会说什么。

int start()
{
    //закрытие по МА-шкам
   if (FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) CloseOpBuySell("BUY");
   if (FRMA1>GrossMA1 && FRMA2<GrossMA2  &&  Ask>FRMA1+Distanse*GetPoint()) CloseOpBuySell("SELL");
  return(0);
}
//----
//-----------------------------------+

void CloseOpBuySell(string TypeClose)
   {
      for(int i=0;i<OrdersTotal();i++)
         {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
               {
                   if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn )
                      {
                        if(TypeClose=="BUY")
                          {
                              if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3,LawnGreen);
                           }
                        if(TypeClose=="SELL")
                          {
                              if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3,LawnGreen);
                          }
                     }
               }
         }
   }
 
Renat Akhtyamov,Natashe4ka非常感谢你。

 
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
这就是地段的计算方式。最大风险==100.我需要自动计算到最大的手数。我写了MaximumRisk==100来计算交易开仓时的最大可能手数。 多少次是正确的?
 
Movlat Baghiyev:
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
这里是地段计算的一个变体。MaxRisk==100.我需要它自动计算每手。我规定MaximumRisk==100来计算交易开始时的最大可能手数。

最好是根据可用资金而不是余额来计算。否则,你有可能在开仓交易时得到比你能承受的多得多的东西。

你还需要计算出手数步骤的依赖性,然后检查该手数是否在账户允许的最大和最小手数范围内。

int MaximumRisk=100;
double lots,lotstep,free,margin, lotmin, lotmax;

lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();

lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);

if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
 
Vitalie Postolache:


明白了,谢谢,让我们看看会发生什么。
 
Vitalie Postolache:

最好是根据可用资金而不是余额来计算。否则,你有可能在开仓交易时得到比你能承受的多得多的东西。

你还需要计算出手数步骤的依赖性,然后检查该手数是否在账户允许的最大和最小手数范围内。

int MaximumRisk=100;
double lots,lotstep,free,margin, lotmin, lotmax;

lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();

lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);

if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
这个选项没有起到应有的作用......以最大可能的手数打开一个交易,在关闭第二个交易后,没有打开第二个交易,写的是没有足够的钱......
 

推迟了。

Gevorg Hakobyan, 2016.12.08 15:26

你好。怎样才能获得Meta Trader 4中所有现有货币对的列表?我又如何能及时了解名单上的任何变化?
 
Vladimir Karputov:

推迟了。

Gevorg Hakobyan, 2016.12.08 15:26

你好。如何获得Meta Trader 4中存在的所有货币对的列表?以及如何注意到名单中的任何变化?

符号总数

返回可用的(在MarketWatch中选择的或全部)符号的数量。

intSymbolsTotal(
bool selected// true - 只有MarketWatch中的符号
);

参数

选定的

[in] 请求模式。可以取值为true或false。

返回的值

如果选择为真,则返回MarketWatch中选择的字符数。如果是假的,它返回所有符号的总数。

 
Vladimir Karputov:

推迟了。

Gevorg Hakobyan, 2016.12.08 15:26

你好。怎样才能获得Meta Trader 4中所有现有货币对的列表?以及如何注意到名单中的任何变化?
而从转让的内容来看,是不是不可能写出能跨平台工作的代码,从在两个平台上获得符号的任务没有区别。