[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 42

 
sting-igor:
а что у ДЦ есть ограничения по количеству сделок?

У некоторых есть не только ограничение по количеству сделок, но даже ограничение на количство запросов.

Они ТАКИЕ изобретатели! :-))

 
Добрый день!
В прошлый раз задавал вопрос по открытию ордеров, теперь вопрос касается их закрытия)
Ниже привожу кусок кода открывающий ордера и функции закрывающие ордера.
В работе эксперта получается такая "особенность" открывается к примеру 10 различных ордеров, 2 из них закрываются в процессе,

а остальные висят до конца теста хотя по условию при открытии одной сделки другая должна закрываться.

........................
magick=MathRand(); 
     
     if(NewBar())
 {     

  //---- Условие SELL
if(MAarrUP1[j]>0.35 && MAarrUP2[j]>1.8)
     {
 closeDnOrd();OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue);
     } 
  
  //---- Условие BUY
    if(MAarrDN1[j]<-0.35 && MAarrDN2[j]<-1.8)
    {
closeUpOrd();OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red);
     }
}
............
//--------------------------------------------------------- Функции

//----- Функция закрытия селл

void closeUpOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

  if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
}
      } 
    }

//---- Функция закрытия бая

void closeDnOrd()
  {
  for(int i=0;i<=OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=magick || OrderSymbol()!=Symbol()) continue;

 if(OrderType()==OP_BUY)
{
 OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
      } 
  }

И еще вопрос по ошибкам 4051 и 134 при использовании OrderClose(), что они значат? Скопировал инфо из лога.

02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: invalid ticket for OrderModify function
02:54:37 2010.10.17 23:16  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderModify error 4051


02:54:37 2010.10.17 23:22  Ti&Pi_Speeder_Exp AUDUSD,M1: OrderSend error 134

 
Vinin:

Вроде последний вариант более менее стал работать. Хотя можно упростить расчеты
Скажите у Вас функция iMAOnArray в отдельном цикле, почему?
 

Подскажите пожайлуста! Как мне при при достижении определенной цены закрить два отложеных ордера с однаковым magic, но с разным лотом.


int start()

{
double MyLastBullOpenPrice=0;
for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
{
OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==12345 && OrderType()==OP_BUY)
{
MyLastBullOpenPrice=OrderOpenPrice();
double Cena=OrderOpenPrice()+5*Point;
double Totalcena= Bid;

if (Totalcena>Cena)
{
if (OrdersTotal()>0)
{ for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{ if(OrderMagicNumber()==12345)

{ if (OrderDelete(OrderTicket())==true)
{
Print("Error = ",GetLastError()); return(0);
}
} } } } }
}
}

return(MyLastBullOpenPrice);
}

 
Fox_RM:
Добрый день!
В прошлый раз задавал вопрос по открытию ордеров, теперь вопрос касается их закрытия)
Ниже привожу кусок кода открывающий ордера и функции закрывающие ордера.
В работе эксперта получается такая "особенность" открывается к примеру 10 различных ордеров, 2 из них закрываются в процессе,

а остальные висят до конца теста хотя по условию при открытии одной сделки другая должна закрываться.

И еще вопрос по ошибкам 4051 и 134 при использовании OrderClose(), что они значат? Скопировал инфо из лога.

134 - нет денюх, 4051 - херовые параметры переданы функции.

По сути вопроса - проверьте, чтобы переменная magick присваивалась у вас только 1 раз, желательно в функции init(), иначе у каждого ордера будет свой магик, и результат получится примерно такой, как вы и рассказываете.

 

Пожалуйста, помогите дописать (или написать) функцию замены символов в строке через массивы.

Имеем два массива символов:

string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};


Пытался написать функцию, которая бы заменяла текст badc на 2143, исходя из массивов, получилось вот так:

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

Знаю что не правильно и собрать массив в строку вообще не могу. Прошу помощи.

 
Zhunko:

У некоторых есть не только ограничение по количеству сделок, но даже ограничение на количство запросов.

Они ТАКИЕ изобретатели! :-))

а есть какой-нибудь блок от их вмешательства в твои дела?
 
Lians:

Пожалуйста, помогите дописать (или написать) функцию замены символов в строке через массивы.

Имеем два массива символов:

string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};


Пытался написать функцию, которая бы заменяла текст badc на 2143, исходя из массивов, получилось вот так:

string ReplaceSymbolsInStr(string text){
string textMod[] ={""};
string symbols1[] = {"a","b","c","d"};
string symbols2[] = {"1","2","3","4"};
int textLen = StringLen(text);
for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)
{
if (symbols1[i2]==OneSymbol) int PosSymbolIn1array=i2;
}
return(-1);

string OneSymbolMod = symbols2[PosSymbolIn1array];
int NewArraySize = ArraySize(textMod)+1;
ArrayResize(textMod,NewArraySize);
textMod[i1]=OneSymbolMod;
string textNew;
textNew=StringConcatenate(textMod[1],textMod[2]...);//собрать массив в строку вообще не могу :(
return (textNew);
}
}

Знаю что не правильно и собрать массив в строку вообще не могу. Прошу помощи.

по идее ты нашел индекс символа в массиве замены, так зачем создавать еще один массив?

попробуй в обычную текстовую переменную в первом же цикле плюсовать полученные данные:

string ReplaceSymbolsInStr(string text)

{


string symbols1[] = {"a","b","c","d"};

string symbols2[] = {"1","2","3","4"};

string textNew="";

int textLen = StringLen(text);

for (int i1=0; i1<textLen; i1++)
{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==OneSymbol) {textNew = textNew + symbols2[ i2 ] ; i2=ArraySize(symbols1) ; }

}

}

return (textNew);

}

 


а еще легче вот так:

string ReplaceSymbolsInStr(string text)

{


string symbols1[4] = {"a","b","c","d"}; // размер массива по количеству символов в нем

string textNew="";

for (int i1=0; i1< StringLen(text) ; i1++)

{
string OneSymbol = StringSubstr(text,i1,1);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==OneSymbol)

{

textNew = textNew + (i2+1) ; // к возвращаемому тексту прибавили номер самого символа отсчет от ЕДИНИЦЫ

i2=ArraySize(symbols1) ; // закончили цикл поиска

}

}

}

return (textNew);

}

 

День добрый!

Подскажите (или дайте ссылку примера), как организовать в советнике автоматическу отправку данных в формате csv на e-mail ?

Спасибо.

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