Помощь в кодировании - страница 778

 

Может ли кто-нибудь показать мне, как сделать этот код короче? Как использовать для этого цикл for?

extern double S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14,S15;
if (S1==1234) S1=DoubleToString(S1);
if (S2==1234) S2=DoubleToString(S2);
if (S3==1234) S3=DoubleToString(S3);
if (S4==1234) S4=DoubleToString(S4);
if (S5==1234) S5=DoubleToString(S5);
if (S6==1234) S6=DoubleToString(S6);
if (S7==1234) S7=DoubleToString(S7);
if (S8==1234) S8=DoubleToString(S8);
if (S9==1234) S9=DoubleToString(S9);

Хотелось бы что-то подобное, но не знаю, как изменить имена переменных.

for(i=1; i<=9; i++){
if (S+i==1234) S+i=DoubleToString(S+i);
}
 
Karel Nagel:

Может ли кто-нибудь показать мне, как сделать этот код короче? Как использовать для этого цикл for?

Хотелось бы что-то подобное, но не знаю, как изменить имена переменных.

Вы не можете инициализировать массив списком входов из-за ограничений языка MQL. (Подойдут только константные выражения типа { 2, 5, 3.1 } ).

Но поскольку вам все равно нужно преобразовывать двойки в строки, вы можете использовать StringFormat. Самое интересное в этой функции то, что она принимает произвольное количество аргументов.

С помощью StringSplit можно создать массив "на лету":

string line=StringFormat("%g %g %g %g %g %g %g %g %g",S1,S2,S3,S4,S5,S6,S7,S8,S9);
string numbers[];
int count=StringSplit(line,' ',numbers);
for(int i=0; i<count; i++)
  {
   if(numbers[i]=="1234") Print(" S",i+1," == 1234");
  }
 
rsiArray[0] = iRSI(NULL,0,10,PRICE_CLOSE,1);
rsiArray[1] = iRSI(NULL,0,10,PRICE_CLOSE,2);
rsiArray[2] = iRSI(NULL,0,10,PRICE_CLOSE,3);
rsiArray[3] = iRSI(NULL,0,10,PRICE_CLOSE,4);
rsiArray[4] = iRSI(NULL,0,10,PRICE_CLOSE,5);
ArraySetAsSeries(rsiArray, true); 

upperEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_UPPER, 0);
lowerEnv = iEnvelopesOnArray(rsiArray, 0, 5,MODE_SMA, 0, 5, MODE_LOWER, 0); 

Я слишком долго пытался разобраться в этом, мне нужна помощь.

Значения конвертов не соответствуют rsiArray[0] или любому значению, которое я вижу на графиках, и я просто не могу понять, почему.


Есть идеи?


Спасибо

EDIT: (исправлено) Хорошо, все, что мне нужно было сделать, это перезапустить mt4, и код работал нормально.

 

Я потратил несколько часов, пытаясь заставить советника/утилиту работать правильно, и сделал несколько изменений, пока мой мозг не онемел. Прилагается предварительная версия, и я улучшу ее, как только преодолею препятствие основ правильной работы, которая заключается в подаче сигнала тревоги при добавлении открытого ордера на покупку/продажу и другого сигнала при закрытии открытого ордера на покупку/продажу. Эта версия иногда работает, а иногда нет, так что на данный момент она ненадежна.


//+------------------------------------------------------------------+
//|               myNotify.mq4                                       |
//|               Notify me by sound file of change in orders        |
//+------------------------------------------------------------------+

//---- input parameters
extern string OrderClosedWav = "OrderClosed.wav";
extern string OrderOpenedWav = "OrderOpened.wav";
string sVersion = "1.39";
int iOld, iNew = 0;
int i = 0;
uchar ii = 0;
long NewOrdersHash = 0;
long OldOrdersHash = 0;

int nOrders = 0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
// +------------------------------------------------------------------+
// |  expert deinitialization function                                |
// +------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

int start()
{ 
    nOrders = 0;
    NewOrdersHash = 0;

//First Pass
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 

OldOrdersHash = NewOrdersHash;
iOld =nOrders;

    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
// Wait
         Sleep(2000);

//Second Pass to compare after short pause
    nOrders = 0;
    NewOrdersHash = 0;
    for(i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)           // NOT "OP_BUYLIMIT" || "OP_BUYSTOP" //|| "OP_SELLLIMIT" || "OP_SELLSTOP")
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
iNew = nOrders;

    if (ii > 24) {ii = 1;} else {ii++;}
       
    Comment ("Ver ",sVersion," \n",
         iOld,"\n", iNew,"\n\n", ii,"\n\n",
         OrderOpenedWav,"\n",
         OrderClosedWav,"\n\n",
         "Old:  ",OldOrdersHash,"\n",
         "New: ",NewOrdersHash,"\n\n",
         nOrders,"\n");
    if (OldOrdersHash != NewOrdersHash)
    {
     if (iNew > iOld)
       PlaySound(OrderOpenedWav);
     else
       PlaySound(OrderClosedWav);
    }

return(0);

}  

/*
void OrdersF()
   {

    nOrders = 0;
    NewOrdersHash = 0;
    for(int i=OrdersTotal()-1;i>=0;i--)
       {
         OrderSelect(i, SELECT_BY_POS);
         if (OrderType() < 2)          
         {
           NewOrdersHash = NewOrdersHash + OrderTicket();
           nOrders++;
         } 
       } 
    iNew = nOrders;
    return;
   }
*/
//+------------------------------------------------------------------+

 

Привет, ребята, я новичок. Я хочу сделать очень простую правку в этом индикаторе.

Как и где я могу просто поместить в поле Описание горизонтальной линии слово, Alert_ ?

чтобы оно автоматически появилось?

С нетерпением жду вашего ответа



//+------------------------------------------------------------------+

//|                                              horizontal line.mq4 |
//|                                                          Wdholic |
//|                            https://www.mql5.com/en/users/wdholic |
//+------------------------------------------------------------------+
#property copyright "Wdholic"
#property link      "https://www.mql5.com/en/users/wdholic"
#property version   "1.00"
#property strict

#import "cfunctions.dll" 
int      MT4_ScreenToClient(int hWnd, int& iX[]);  
#import
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  { 
    double pmax=ChartGetDouble(0,CHART_PRICE_MAX);
    double pmin=ChartGetDouble(0,CHART_PRICE_MIN);
    double Ymax=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS)*1.0;
   //  Alert(pmin);Alert(pmax);Alert(Ymax);
   int iCoords[2] ;
    int hWin = WindowHandle( Symbol(), Period());  
   
    MT4_ScreenToClient(hWin, iCoords);    
               
    double cory=iCoords[1]*1.0;
    double range=(pmax-pmin);
    
    double XY= (cory*1.0)/Ymax;
      double P=pmax-XY*range;
     
        
   Line("test_",P,clrAqua);
   WindowRedraw();
   return;
  }
//+------------------------------------------------------------------+

void Line(string t,double P,color C )
{ int a=1;string nm;
    nm="line_"+t+string(a);
  while(ObjectFind(0,nm)==0){ a++; nm="line_"+t+string(a);}
  
if(ObjectFind(0,nm)<0){
  ObjectCreate(0,nm,OBJ_HLINE,0,0,0); 
  ObjectSet( nm,OBJPROP_COLOR,C);}
  ObjectSet( nm,OBJPROP_PRICE1,P);  
  ObjectSet( nm,OBJPROP_SELECTED,1);  
}

 

Кто-нибудь может помочь мне закодировать это. Помещаю прямоугольник как максимум и минимум за последние 3 месяца, как показано на рисунке спасибо

Файлы:
INDIxxx.jpg  243 kb
 

кто-нибудь помогите со стоплоссом на предыдущем пересечении ma



 

Привет,

У меня есть идея. Но я не очень хорошо знаю код mq4.

Предыдущий максимум ниже 2-го предыдущего максимума, тогда покупаемотложенный ордер по предыдущему максимуму * 2% или 1% и когда цена на текущей свече коснется этого ордера покупаем.

Предыдущий минимум выше, чем 2 предыдущих минимума, то продаем отложенный ордер по предыдущему минимуму * -2% или -1% и когда цена на текущей свече коснется этой ордера продаем.

Любой период. Нет цели Нет стоп-лосса. Трейлинг стоп лосс как противоположный.

Благодарен всем, кто может сделать код mq4. Мне нужна помощь. Только MT4.

 

Привет...

Можете ли вы сделать эксперт для этой стратегии, пожалуйста

Эксперт по усилению

Настройки:

1.Вариант: только продажа / только покупка

2.TP: 50

3.Sl: 00

4.Шаг: 150

5.Стартовый лот: 0,1

6.Умножение: 1.2.4.8.16... ... ...

7.Всего заказов: 100

8.Магическое число: 111111

Метод работы:

1- Открытие позиции на старте автоматически на указанный размер лота .

2- Изменение Tp для всех сделок на каждом усилении .

Согласно следующему уравнению: Tp для последней двойной позиции покрывает нам весь плавающий убыток + прибыль последней позиции .

3- Возврат к начальному лоту .

 
BANSINO Money Maker:

Привет ...

Можете ли вы сделать эксперт для этой стратегии, пожалуйста

Эксперт по усилению

Настройки :

1. Опция: Только продажа / Только покупка

2. TP: 50

3. Sl: 00

4. Шаг: 150

5. Стартовый лот: 0,1

6. Умножение: 1.2.4.8.16... ... ...

7. Всего заказов: 100

8. Магическое число: 111111

Метод работы :

1- Открытие позиции на старте автоматически на указанный размер лота .

2- Изменение Tp для всех сделок на каждом усилении .

Согласно следующему уравнению: Tp для последней двойной позиции покрывает нам весь плавающий убыток + прибыль последней позиции .

3- Возврат к начальному лоту .

Опубликуйте это как работу в разделе Фриланс.

Причина обращения: