Вопросы от начинающих 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);
Вот такой вариант расчета лота .MaximumRisk==100 .Мне нужно чтобы лот считался каждый раз автоматически по максимуму .MaximumRisk==100  прописал,чтобы просчитывался максимально возможный лот на при открытии сделки .На сколько это верно прописано?
 
Movlat Baghiyev:
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
Вот такой вариант расчета лота .MaximumRisk==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 валютных пар? И как быть в курсе любых изменений в списке?

SymbolsTotal

Возвращает количество доступных (выбранных в MarketWatch или всех) символов.

int  SymbolsTotal(
   bool  selected      // true – только символы в MarketWatch
   );

Параметры

selected

[in]  Режим запроса. Может принимать значения true или false.

Возвращаемое значение

Если параметр selected равно true, то возвращается количество выбранных в MarketWatch символов. Если значение false, то возвращается общее количество всех символов.

 
Vladimir Karputov:

Перенесено:

Gevorg Hakobyan, 2016.12.08 15:26

Здравствуйте. Как можно получить список всех существующих в Meta Trader 4 валютных пар? И как быть в курсе любых изменений в списке?
А от чего перенесено, неужели нельзя написать код, который будет работать кроссплатформенно, в задаче нет никаких отличий от получения символов в двух платформах.