Any rookie question, so as not to clutter up the forum. Professionals, don't pass by. Nowhere without you - 6. - page 554

 

splxgf: - Thank you very much! Everything works like clockwork!

Here is Igor Kim's breakeven code, converted "splxgf:" instead of points to percentages:

//+----------------------------------------------------------------------------+
//| Author : Kim Igor V. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Version : 23.04.2009 |
//| Description : Move stop level to lossless |
//+----------------------------------------------------------------------------+
//| Parameters: |
//| sy - instrument name ( "" - any symbol, |
//| NULL - current symbol) |
//| op - operation ( -1 - any position) |
//| mn - MagicNumber ( -1 - any magician) |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy=NULL, int op=-1, int mn=-1) {

double po, pp, PercentStep,MoveStoplossLevel,StoplossLevel;
int i, k=OrdersTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy==") && (op<0 || OrderType()==op)) {
if (mn<0 || OrderMagicNumber()==mn) {

po=MarketInfo(OrderSymbol(), MODE_POINT);

if (OrderType()==OP_BUY) {
PercentStep=(OrderTakeProfit()-OrderOpenPrice())/po/(138-23);
MoveStoplossLevel = OrderOpenPrice() + PercentStep*(76-23);
StoplossLevel = OrderOpenPrice() + PercentStep*(51-23);
if (OrderStopLoss()-OrderOpenPrice()<StoplossLevel*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>MoveStoplossLevel*po) {
ModifyOrder(-1, OrderOpenPrice()+StoplossLevel*po, -1);
}
}

}


if (OrderType()==OP_SELL) {
PercentStep=(OrderTakeProfit()-OrderOpenPrice())/po/(138-23);
MoveStoplossLevel = OrderOpenPrice() - PercentStep*(76-23);
StoplossLevel = OrderOpenPrice() - PercentStep*(51-23)
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<StoplossLevel*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>MoveStoplossLevel*po) {
ModifyOrder(-1, OrderOpenPrice()-StoplossLevel*po, -1);

}
}
}
}
}
}
}
}

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

Figures:

138 is the takeprofit in % Fibonacci.

23 is order open price in % Fibonacci

76 is % of Fibonacci grid, if price reaches this value, stop loss will be moved to 51% of Fibonacci grid.

Function from e-MovingInWL2 Expert Advisor.

 
int start()
{

Trailing();


double Line11=iCustom(Symbol(), 0, "TDI Red Green", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type, 4, 1);
double Line12=iCustom(Symbol(), 0, "TDI Red Green", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type, 4, 2);
double Line21=iCustom(Symbol(), 0, "TDI Red Green", RSI_Period, RSI_Price, Volatility_Band, RSI_Price_Line, RSI_Price_Type, Trade_Signal_Line, Trade_Signal_Type, 5, 1);

if (timeprev == Time[0]) return(0);
timeprev = Time[0];

ma0=iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,1);
ma1=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,1);
ma2=iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,1);
ma3=iMA(NULL,0,800,0,MODE_SMA,PRICE_CLOSE,1);

if (CountBuy()>5 && Volume[0]==1 && Ask > ma0 && Ask > ma1 && Ask > ma3)
{
if (Line11>Level1&&Line12<Level1&&Line11>Line12)
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Ask-sl*Point, Ask+tp*Point, comment, Magic, 0, Blue);
}

if (CountSell()>5 && Volume[0]==1 && Bid < ma0 && Bid < ma1 && Ask < ma3)
{
if (Line11>Level2&&Line12>Level1&&Line11>Line12)
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Ask+sl*Point,Ask-tp*Point, comment, Magic, 0, Red);
}

return(0);
}


Please help to find an error in the code with the signal to open orders by TDI Red Green indicator.

The tester does not open deals, or opens only one. It does not report any errors.

I have indicated the buffers of the indicator correctly.

I'm just learning mql4 for a few days, I'm a beginner)))

I am thankful in advance for the help!
 
I'm faced with this dilemma - let's say there is a loop-for:

int Array_1[][];
int Array_2[][];
int Array_3[][];
int Array_4[][];
 . . . 


start() {

   for(int k=1; k<=N; k++) {

      if(k==1) {
         Используем массив ARRAY_1
      }
      if(k==2) {
         Используем массив ARRAY_2
      }
      if(k==3) {
         Используем массив ARRAY_3
      }
      . . . 
   } // for(int k=1; k<=N; k++) {

} // start() {

parameter N in it is variable, which means that each time it is changed, the code has to be reworked by adding (or removing) "if" conditions (under corresponding array).

Question - is it possible to use only one "if", but use variable "to" in array names (or something else)? I.e. something like ARRAY_{k}. I know that we can replace arrays with terminal variables, but it's an extreme case. Does such a solution exist for arrays?
 
chief2000:
I faced this dilemma - let's say there is a loop-for:


parameter N in it is variable, which means that each time you change it, you have to modify code by adding (or deleting) "if" conditions (under corresponding array).

Question - is it possible to use only one "if", but use variable "to" in array names (or something else)? I.e. something like ARRAY_{k}. I know that we can replace arrays with terminal variables, but this is an extreme case. Does such a solution exist for arrays?

You can if it's somehow similar:

// Константы
#define   Version     "TT-Pod 1.2.6"
#define   MyError     4999
#define   Infinity    100000000.0
#define   Zero                0.00000001
#define   TypesTotal  24
// Глобальные переменные и массивы
int      LastBar,
         Visibility,
         Groups[2],
         MainGroup[2],
         OldMG[2],
         StumbleNumber[2];
double   QualityMax[2];
datetime DeadLine,
         OldStopLine,
         StartTime[2],
         NewTime;
color    ЦветЛиний[2],
         Цвет123[2],
         ЦветХорды[2];
string   NameTangent[2]     ={"RaisingTangent"     ,"ReducingTangent"     },
         NameTrend[2]       ={"RaisingTrend"       ,"ReducingTrend"       },
         NameBorder[2]      ={"RaisingBorder"      ,"ReducingBorder"      },
         NameLevel1[2]      ={"RaisingLevel_1_"    ,"ReducingLevel_1_"    },
         NameLevel12[2]     ={"RaisingLevel_2_"    ,"ReducingLevel_2_"    },
         NameLevel2[2]      ={"RaisingLevel_3_"    ,"ReducingLevel_3_"    },
         NameLevel22[2]     ={"RaisingLevel_4_"    ,"ReducingLevel_4_"    },
         NameMainLevel1[2]  ={"MainRaisingLevel_1" ,"MainReducingLevel_1" },
         NameMainLevel12[2] ={"MainRaisingLevel_3" ,"MainReducingLevel_3" },
         NameMainLevel2[2]  ={"MainRaisingLevel_2" ,"MainReducingLevel_2" },
         NameMainLevel22[2] ={"MainRaisingLevel_4" ,"MainReducingLevel_4" },
         NameTrace[2]       ={"RaisingTrace"       ,"ReducingTrace"       },
         NameAttention[2]   ={"RaisingAttention"   ,"ReducingAttention"   },
         NameSpiral[2]      ={"RaisingSpiral"      ,"ReducingSpiral"      },
         NameSpan[2]        ={"RaisingSpan"        ,"ReducingSpan"        },
         NameMainLevel0[2]  ={"MainRaisingLevel_0" ,"MainReducingLevel_0" },
         NameMainLevel5[2]  ={"MainRaisingLevel_5" ,"MainReducingLevel_5" },
         NameMainLevel6[2]  ={"MainRaisingLevel_6" ,"MainReducingLevel_6" },
         NameBaseLevel[2]   ={"RaisingBaseLevel"   ,"ReducingBaseLevel"   },
         Name123[2]         ={"RaisingTrendBreak"  ,"ReducingTrendBreak"  },
         NameSpiralBorder[2]={"RaisingSpiralBorder","ReducingSpiralBorder"},
         NameDirector[2]    ={"RaisingDirector"    ,"ReducingDirector"    },
         NameHorizont[2]    ={"RaisingHorizont"    ,"ReducingHorizont"    },
         NameStumble[2]     ={"RaisingStumble"     ,"ReducingStumble"     },
         РежимРаботы        =" ",
         TextTangent[2]     ={""                                  ,""},
         TextTrend[2]       ={""                                  ,""},
         TextTrace[2]       ={""                                  ,""},
         TextBorder[2]      ={""                                  ,""},
         TextLevel1[2]      ={""                                  ,""},
         TextLevel12[2]     ={""                                  ,""},
         TextLevel2[2]      ={""                                  ,""},
         TextLevel22[2]     ={""                                  ,""},
         TextSpan[2]        ={""                                  ,""},
         TextDirector[2]    ={"                                              Директорная ВТ"
                             ,"                                              Директорная НТ"},
         TextHorizont[2]    ={"                                              Горизонт ВТ"
                             ,"                                              Горизонт НТ"},
         Text123[2]         ={"Пробой ВТ"                         ,"Пробой НТ"},
         TextAttention[2]   ={"В! "                               ,"Н! "},
         TextSpiral[2]      ={"          ВТ"                      ,"          НТ"},
         TextSpiralBorder[2]={"               ВГр"                ,"               НГр"},
         TextMainLevel0[2]  ={"ВУр0"                              ,"НУр0"},
         TextMainLevel1[2]  ={"     ВУр1"                         ,"     НУр1"},
         TextMainLevel2[2]  ={"          ВУр2"                    ,"          НУр2"},
         TextMainLevel12[2] ={"",""},
         TextMainLevel22[2] ={"                    ВУр4"          ,"                    НУр4"},
         TextMainLevel5[2]  ={"                         ВУр5"     ,"                         НУр5"},
         TextMainLevel6[2]  ={"                              ВУр6","                              НУр6"},
         TextBaseLevel[2]   ={"                ВБУ"               ,"                НБУ"},
         TextStumble[2]     ={""                                  ,""};
// Внешние переменные
extern double  МинНаклонТренда         =0.0,       // Фильтры "ложных" трендовых
               МаксНаклонТренда        =Infinity;
extern string  Варианты="1=Hb, 2=Hb/H, 3=H, 4=V, 5=N";
extern int     КритерийВыбора          =5,
               МинБазовыйПериод        =1,
               МаксБазовыйПериод       =Infinity,
               БарНачала               =Infinity,  // Параметры отображения
               БарОкончания            =1,
               ПериодИмитацииТиков     =2000,
               СдвигИндикатораТиков    =10,
               ЗнакИндикатораТиков     =159,
               РазмерИндикатораТиков   =5,
               ТолщинаТрендовой        =3;
extern color   ЦветПоддержки           =Green,
               ЦветВосходящейХорды     =LimeGreen,
               Цвет123 ВТ               =LightYellow,
               ЦветСопротивления       =Red,
               ЦветНисходящейХорды     =HotPink,
               Цвет123 НТ               =LightYellow,
               ЦветВертикалей          =DimGray,
               ЦветИндикатораТиков     =DarkOrange;
extern bool    ОчиститьЭкран           =true,
               ПоказыватьВсе           =false,
               РежимОтладки            =true,      // Режим работы программы
               СтатическийРежим        =false,
               МоделироватьДинамику    =false,
               ПечататьПредупреждения  =false;
//-----------------------------------------------------------------------------
// Удаление созданных графических объектов
void ClearScreen(){
   int Dimension=2*TypesTotal;
   string Name, Pref[];
   Comment("                                                       "+
           "                                                       "+
           "                                                       ");
   ArrayResize(Pref,Dimension);
   Pref[ 0]=NameTangent[0];
   Pref[ 1]=NameTangent[1];
   Pref[ 2]=NameTrend[0];
   Pref[ 3]=NameTrend[1];
   Pref[ 4]=NameBaseLevel[0];
   Pref[ 5]=NameBaseLevel[1];
   Pref[ 6]=NameTrace[0];
   Pref[ 7]=NameTrace[1];
   Pref[ 8]=NameLevel12[0];
   Pref[ 9]=NameLevel12[1];
   Pref[10]=NameLevel22[0];
   Pref[11]=NameLevel22[1];
   Pref[12]=NameBorder[0];
   Pref[13]=NameBorder[1];
   Pref[14]=NameLevel2[0];
   Pref[15]=NameLevel2[1];
   Pref[16]=NameMainLevel12[0];
   Pref[17]=NameMainLevel12[1];
   Pref[18]=NameMainLevel22[0];
   Pref[19]=NameMainLevel22[1];
   Pref[20]=NameSpiralBorder[0];
   Pref[21]=NameSpiralBorder[1];
   Pref[22]=NameMainLevel2[0];
   Pref[23]=NameMainLevel2[1];
   Pref[24]=NameAttention[0];
   Pref[25]=NameAttention[1];
   Pref[26]=NameLevel1[0];
   Pref[27]=NameLevel1[1];
   Pref[28]=NameMainLevel1[0];
   Pref[29]=NameMainLevel1[1];
   Pref[30]=NameSpiral[0];
   Pref[31]=NameSpiral[1];
   Pref[32]=NameSpan[0];
   Pref[33]=NameSpan[1];
   Pref[34]=NameMainLevel0[0];
   Pref[35]=NameMainLevel0[1];
   Pref[36]=NameMainLevel5[0];
   Pref[37]=NameMainLevel5[1];
   Pref[38]=NameMainLevel6[0];
   Pref[39]=NameMainLevel6[1];
   Pref[40]=Name123[0];
   Pref[41]=Name123[1];
   Pref[42]=NameDirector[0];
   Pref[43]=NameDirector[1];
   Pref[44]=NameStumble[0];
   Pref[45]=NameStumble[1];
   Pref[46]=NameHorizont[0];
   Pref[47]=NameHorizont[1];
   int i, k=ObjectsTotal()-1;
   while( k>=0 ){
      Name=ObjectName(k);
      i=Dimension-1;
      while( i>=0 ){
         if( StringSubstr(Name,0,StringLen(Pref[i]))==Pref[i] ){
            if( !ObjectDelete(Name) ) {
               if( !РежимОтладки ) PlaySound("alert.wav");
               Print("***** "+Name+": ошибка удаления "+GetLastError()+" при очистке экрана");
         }  }
         i--;
      }
      k--;
   }
   return;
}
 
tara:

You can if it's somehow similar:


Can you describe in words what was meant?
 
chief2000:

Can you describe in words what was meant?


Sorry, got distracted.

The array index is made part of the identifier.

 

Here's a simple code.

I want the program to draw a vertical line on EVERY fiftieth candle.

the program will draw a vertical line.

THE PROBLEM IS .

The program exhibits one vertical line ONLY ON THE FIRST CROWN (multiple of 50).

Thank you.

double p;

int start()
{

p=Bars%50;
if(p<1)
ObjectCreate(0, OBJ_VLINE, 0, Time[1],0  );

                     
return(0);
}
 
tara:


The array index is made part of the identifier.


As far as I understand your solution won't work in my case, but it gave me an idea worth checking out. Thank you!
 
solnce600:

Here's a simple code.

I want it on EVERY fiftieth candle.

the program was exposing a vertical line.

PROBLEM

The program sets one vertical line ONLY on the FIRST LINE (multiple of 50).

I want it to be the same name for every fiftieth candle.

You are trying to create several objects with the same name and this is not possible. The name has to be unique, like time:

ObjectCreate(Time[i], OBJ_VLINE, 0, Time[i],0 );

That's first of all. Secondly, where is the loop? How will the script count the candles?

 
evillive:

You are trying to create several objects with the same name, but you can't do that. The name of an object must be unique, for example the time:

This is first of all. Secondly, where is the loop? How would the script count candlesticks?

Thank you very much.

If you don't mind, could you write the code?

On each candle divisible by 50 - display a vertical line.

Then I'll immediately understand what's what, and remember it once and for all.

Otherwise I'll be in over my head for a long time.

Thanks again.

Reason: