Требуется помощь - страница 2

 
WHRoeder:
Не используйте tickvalue само по себе https://www.mql5.com/en/forum/133792/page3#512466

Не могу понять, что вы хотели сказать,

pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;

Даже я не понял вашу мысль по ссылке, которой вы поделились. В моем коде,

if (Digits == 5 || Digits == 3)
   {            
      pips2dbl = Point*10; pips2point = 10; pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*10;
   } 
   else 
   {    
      pips2dbl = Point;   pips2point = 1; pipValue = (MarketInfo(Symbol(),MODE_TICKVALUE))*1;
   }
   
   Slippage = pips2dbl*MaxSlippage;
   TP = pips2dbl*Limit_TP;
   SL = pips2dbl*Limit_SL;

не могли бы вы изменить его? Чтобы я мог понять его лучше.

@RaptorUK На этот раз...

int i,j,k;

and

int i = 0, j, k;

Оба сработали, ошибки нет. Странно. Но я все же изменил его.

 
Где теперь можно найти https://docs.mql4.com/indicators/iama????
 
qgmql:
Где я теперь могу найти https://docs.mql4.com/indicators/iama????

Он сломан, я подал заявку в службу поддержки ... тем временем ... .

iMA

Рассчитывает индикатор Moving Average и возвращает его значение.

double iMA(
string символ, // символ
int timeframe, // таймфрейм
int ma_period, // период усреднения МА
int ma_shift, // сдвиг МА
int ma_method, // метод усреднения
int applied_price, // применяемая цена
int shift // сдвиг
);

Параметры

символ

[in] Имя символа, на данных которого будет рассчитываться индикатор. NULL означает текущий символ.

таймфрейм

[in] Таймфрейм. Это может быть любое из значений перечисления ENUM_TIMEFRAMES. 0 означает текущий таймфрейм графика.

ma_period

[in] Период усреднения для расчета.

ma_shift

[in] Смещение MA. Смещение линии индикаторов относится к графику по таймфреймам.

ma_method

[in] Метод скользящего среднего. Может быть любым из значений перечисления ENUM_MA_METHOD.

прикладная_цена

[in] Применяемая цена. Это может быть любое из значений перечисления ENUM_APPLIED_PRICE.

сдвиг

[in] Индекс значения, взятого из буфера индикатора (сдвиг относительно текущего бара на заданное количество периодов назад).

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

Числовое значение индикатора Moving Average.

Пример:

AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);

 
RaptorUK:

Он сломан, я отправил тикет в службу поддержки ... тем временем ....

Служба поддержки 2014.02.18 08:09
Исправлено. Спасибо.


iMA()
 

Что я должен использовать для функции expert to start?

void ontick() {
}
return;

//OR...

int start() {
}
return(o);

или я могу использовать оба в новом мета-редакторе?

(я думаю, что спрашиваю об очень базовых вещах, но на самом деле у меня ноль знаний и я заинтересован в их изучении).

 
qgmql:

Что я должен использовать для функции expert to start?

или я могу использовать оба в новом мета-редакторе?

(я думаю, что спрашиваю об очень базовых вещах, но на самом деле у меня ноль знаний и я заинтересован в их изучении).

Вы можете использовать любой из них... но для будущей совместимости используйте OnTick()
 

Много пытался получить код для функции "LotsProgression" для моего советника, но он запутался. Не могли бы вы, ребята, выделить код в приведенном ниже источнике, который написан для прогрессии лотов? (и также, пожалуйста, скажите, как выделить часть исходника, как здесь)

extern int expertId = 183547;
extern int TakeProfit=40;
extern int StopLoss=10;
extern int BreakevenStop = 30;

extern bool TimeEntry=true;
extern string StartTime="7:00";
extern string StopTime="17:00";
extern bool PriceEntry=false;
extern double Price=1.5500;
extern bool FirstLong=false;
extern string LotsProgression="0.1;0.1;0.2;0.3;0.4;0.6;0.8;1.1;1.5;2.0;2.7;3.6;4.7;6.2;8.0;10.2;13.0;16.5;20.8;26.3;33.1;41.6;52.2;65.5;82.5;103.9;130.9;165;207.9;262;330.1;416;524.7;661.1";
extern bool RestartNewCycle = true;

extern int    slippage=3;       //slippage for market order processing
extern int    OrderTriesNumber=10; //to repeat sending orders when you receive an error or requote

extern string    EAName="PowerSM"; 

bool buysig,sellsig,cycleended;
int tries,long,short,co,plen,lord,mord,lpos;
double Lot,lots[],tlot,lop,lcp,lsl,ltp;

double lbid = -1;

int counter = 0;

int init() 
{
   int i,j,k;
   string ls;
   while (true) {
        j=StringFind(LotsProgression,";",i);
        if (j>0) {
                ls=StringSubstr(LotsProgression,i,j-i);
                i=j+1;
                k++;
                ArrayResize(lots,k);
                lots[k-1]=StrToDouble(ls);
        } else {
                ls=StringSubstr(LotsProgression,i);
                k++;
                ArrayResize(lots,k);
                lots[k-1]=StrToDouble(ls);
                break;
        }
   }

   plen=ArraySize(lots);
}

void start()  {
   
   //---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
   
   if (lbid == -1) lbid = Bid;

   co=CalculateCurrentOrders();
   if (co > 0) counter = 1;
      
   CheckForSignals();
   CheckForOpen();  
   DoBreakEven(BreakevenStop,0);
   
   lbid = Bid;
}


int CalculateCurrentOrders() {
   int ord; string c;
//----
   for(int i=0;i<OrdersTotal();i++) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==expertId) {
         ord++;
         if (OrderType()==OP_BUY) {
            mord=1;
            if (OrderClosePrice()-OrderOpenPrice()>BreakevenStop*Point) tlot=MathAbs(tlot); else tlot=-MathAbs(tlot);
         }
         if (OrderType()==OP_SELL) {
            mord=-1;
            if (-OrderClosePrice()+OrderOpenPrice()>BreakevenStop*Point) tlot=MathAbs(tlot); else tlot=-MathAbs(tlot);
         }
         c=StringSubstr(OrderComment(),0,StringFind(OrderComment(),"_",0));
         lpos=StrToInteger(c);
         return(ord);
      }
   }
//---- return orders volume
   return(ord);
}

double GetLastTrade() 
{
   int ord; lord=0;
   string c;
//----
   for(int i=OrdersHistoryTotal()-1;i>=0;i--) 
   {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==expertId) 
      {
         if (OrderType()==OP_BUY) lord=1;
         if (OrderType()==OP_SELL) lord=-1;
         c=StringSubstr(OrderComment(),0,StringFind(OrderComment(),"_",0));
         lpos=StrToInteger(c);
         
         lop = NormalizeDouble(OrderOpenPrice(), Digits);
         lcp = NormalizeDouble(OrderClosePrice(), Digits);
         lsl = NormalizeDouble(OrderStopLoss(), Digits);
         ltp = NormalizeDouble(OrderTakeProfit(), Digits);
         
         if (OrderProfit()>0) 
          return(OrderLots()); 
         else 
          return(-OrderLots());
      }
   }
   return(0);
}

bool IsEntryTime()
{
  datetime tm0 = TimeCurrent();
  datetime tm1 = StrToTime(TimeToStr(tm0, TIME_DATE) + " " + StartTime);
  datetime tm2 = StrToTime(TimeToStr(tm0, TIME_DATE) + " " + StopTime);

  bool isTm = false; 
  if (tm1 <= tm2) 
    isTm = isTm || (tm1 <= tm0 && tm0 < tm2);
  else
    isTm = isTm || (tm1 <= tm0 || tm0 < tm2);
  
  return (isTm);
}

void CheckForSignals() 
{
  buysig = false;
  sellsig = false;
      
        if (co > 0) return;

  if (TimeEntry)
  {
    bool cond = IsEntryTime();
    if (!cond) return;
  }

  if (PriceEntry)
  { 
    cond = ((Bid >= Price && lbid < Price) || (Bid <= Price && lbid > Price));
    if (!cond) return;
  }
        
        double lastlot = GetLastTrade();
        if (lastlot >= 0)
        {
          if (counter > 0)
          {
            if (!RestartNewCycle) return;
          }
        
    if (FirstLong) 
      buysig = true; 
    else 
      sellsig = true;
      
    lpos = 0;
    Lot = lots[0];
        }

        else
        {
    lpos++;

    int BE = 0;
    if (lord > 0 && lcp == lop+BE*Point) lpos--;
    if (lord < 0 && lcp == lop-BE*Point) lpos--;

    Lot = lots[lpos];
    if (lord > 0) 
      sellsig = true;
    else if (lord < 0) 
      buysig = true;
  }
}

void CheckForOpen() {
   int    res,tr,TP;
   //---- sell conditions
   if(sellsig && co==0)  {
           Print("sell open ",Lot," ",lpos);
      res = OpenAtMarket(OP_SELL,Lot,TakeProfit,lpos);
           if (res>0) { tlot=Lot; }
      return;
   }
   //---- buy conditions
   if(buysig && co==0)  {
           Print("buy open ",Lot," ",lpos);
      res = OpenAtMarket(OP_BUY,Lot,TakeProfit,lpos);
           if (res>0) { tlot=Lot; }
      return;
   }
}
  
int OpenAtMarket(int mode,double lot,int TP,int pos) {
   int    res,tr,col;
   double openprice,sl,tp;
   tries=0;
   while (res<=0 && tries<OrderTriesNumber) {
      tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }
      RefreshRates();
      if (mode==OP_SELL) {
         openprice=Bid; 
         if (StopLoss>0) sl=openprice+StopLoss*Point;
         if (TP>0) tp=openprice-TP*Point;
         col=Red;
      } else {
         openprice=Ask;
         if (StopLoss>0) sl=openprice-StopLoss*Point;
         if (TP>0) tp=openprice+TP*Point;
         col=Blue;
      }
      res=OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,pos+"_"+EAName+"_"+expertId,expertId,0,col);
      tries++;
   }
   Print("market order:: ",Symbol(),"  ",mode,"  ",lot,"  ",openprice,"  ",sl,"  ",tp,"  ",pos+"_"+EAName+"_"+expertId);
   if (res<=0) Print("error opening order : ",ErrorDescription(GetLastError()));
   return(res);
}


void DoBreakEven(int BP, int BE) {
   bool bres;
   for (int i = 0; i < OrdersTotal(); i++) {
      if ( !OrderSelect (i, SELECT_BY_POS) )  continue;
      if ( OrderSymbol() != Symbol() || OrderMagicNumber() != expertId )  continue;
      if ( OrderType() == OP_BUY ) {
         if (Bid<OrderOpenPrice()+BP*Point) continue;
         if ( OrderOpenPrice()+BE*Point-OrderStopLoss()>Point/10) {
               //Print(BP,"  ",BE," bestop");
               bres=OrderModify (OrderTicket(), OrderOpenPrice(), OrderOpenPrice()+BE*Point, OrderTakeProfit(), 0, Black);
                                   if (!bres) Print("Error Modifying BE BUY order : ",ErrorDescription(GetLastError()));
         }
      }

      if ( OrderType() == OP_SELL ) {
         if (Ask>OrderOpenPrice()-BP*Point) continue;
         if ( OrderStopLoss()-(OrderOpenPrice()-BE*Point)>Point/10) {
               //Print(BP,"  ",BE," bestop");
               bres=OrderModify (OrderTicket(), OrderOpenPrice(), OrderOpenPrice()-BE*Point, OrderTakeProfit(), 0, Gold);
                                   if (!bres) Print("Error Modifying BE SELL order : ",ErrorDescription(GetLastError()));
         }
      }
   }
   return;
}

/*
int FindPos(double ls) {
   for (int i=0; i<plen; i++) {
      if (NormalizeDouble(MathAbs(lots[i]-ls),3)<0.001) return(i);
   }
   return(-1);
}
*/
 
qgmql: выделите код в приведенном ниже исходнике, который написан для проги lots? (а также подскажите, пожалуйста, как выделить часть исходного кода)

  1. В init
    extern string LotsProgression="0.1;0.1;0.2;0.3;0.4;0.6;0.8;1.1;1.5;2.0;2.7;3.6;4.7;6.2;8.0;10.2;13.0;16.5;20.8;26.3;33.1;41.6;52.2;65.5;82.5;103.9;130.9;165;207.9;262;330.1;416;524.7;661.1";
    становится
     double lots[]

  2. Исправьте отступы и вы увидите, где используется lots[].
    double lastlot = GetLastTrade();
    if (lastlot >= 0){
       if (counter > 0){
          if (!RestartNewCycle) return;
       }
    
       if (FirstLong) buysig = true; 
       else           sellsig = true;
    
       lpos = 0;
       Lot = lots[0];
    }
    else{
       lpos++;
    
       int BE = 0;
       if (lord > 0 && lcp == lop+BE*Point) lpos--;
       if (lord < 0 && lcp == lop-BE*Point) lpos--;
    
       Lot = lots[lpos];
       if (lord > 0)        sellsig = true;
       else if (lord < 0)   buysig = true;
    }
    
  3. if (lord > 0 && lcp == lop+BE*Point)
    Операнд ==. - Форум MQL4


 
qgmql:

Много раз пытался получить код для функции "LotsProgression" для моего советника, но он запутался.


Что запутано, можете объяснить свою проблему?
 

Я думаю, что с этим #property strict вам придется инициализировать i,j,k значением...


int i=0,j=0,k=0;

PipPip... Jimdandy