Уважаемые форумчане.
Объясните пожалуйста, каким образом происходит, что срабатывает "else", когда "alafim=0" ?
А строчка
Print("222222222222. x: ",x," alafim: ",alafim);
выдаёт:
"222222222222. x: 1 alafim: 0
??????????????
ведь 1 больше чем 0
---------------------------------------------------------------------
Вопрос-то про осечку цикла for. Однажды было такое. Помогла перезагрузка компьютера.
Без причины так не должно быть. Ведь если alafim==0 (как показал Print), то цикл for(x=0;x <= alafim;x++) выполнится лишь раз для x=0.
Однако надо посмотреть, где меняется alafim и как описан массив TicketVector[x] и другие -
встречался с таким - причина была в выходе за пределы описанного массива. Потому надо попробовать программу с директивой #property strict.
Однажды наткнулся на ошибку компилятора - переставил малозначащие строчки программы и вставил незначащий оператор вроде alafim=alafim; и все заработало.
Был случай процессор давал ошибку при сложении двух определенных чисел - выкинули сопроцессор и заработало. Попробовать на другом компьютере.
Это шутка сумел: вот ВещДок
и программу приложил. Любой сможет повторить...
Вопрос-то про осечку цикла for. Однажды было такое. Помогла перезагрузка компьютера.
Без причины так не должно быть. Ведь если alafim==0 (как показал Print), то цикл for(x=0;x <= alafim;x++) выполнится лишь раз для x=0.
Однако надо посмотреть, где меняется alafim и как описан массив TicketVector[x] и другие - возможная причина в выходе за пределы описанного массива.
Потому надо попробовать программу с директивой #property strict.
Но тоже сумел: вот ВещДок
и программу приложил. Любой сможет повторить...
А можно попонятнее? Ничего не понял!
Между прочим, код работает нормально, но иногда происходит эта осечка и всё портит.
Насчот "alafim":
------------------------------------------------------------------
int ticket,TicketVector[24],cmd,Tstavka,stavka,alafim;
int start()
{
.......
alafim=0;
if(stavka > MaxStavka)
{
Print("11111111111. stavka: ",stavka);
alafim=stavka/MaxStavka;
stavka=stavka-MaxStavka*alafim;
}
.....
}
------------------------------------------------------------------
1. Поставьте в начало #property strict
Без strict Ошибка Array out of range" (индекс за пределами массива) не приводит к критической ошибке
а при наличии strict "Array out of range" - критическая ошибка и приводит к остановке программы
Какое все-таки максимальное значение alafim ??? Дело в том, что в цикле for(x=0;x <= alafim;x++) величина x может достичь alafim
2. Если будет x=24 и больше, то TicketVector[x]=ticket; изменит переменную, следующую в памяти за массивом. Увеличьте количество элементов TicketVector[100].
3. Попробуйте контролировать величину alafim так что-ли
if(stavka > MaxStavka)
{
alafim=stavka/MaxStavka;
stavka=stavka-MaxStavka*alafim;
Alertt("11111111111. stavka: ", stavka, " alafim: ", alafim);
}
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые форумчане.
Объясните пожалуйста, каким образом происходит, что срабатывает "else", когда "alafim=0" ?
А строчка
Print("222222222222. x: ",x," alafim: ",alafim);
выдаёт:
"222222222222. x: 1 alafim: 0
??????????????
ведь 1 больше чем 0
---------------------------------------------------------------------
int start()
{
...
for(x=0;x <= alafim;x++)
{
ticket=-1;
while(ticket == -1)
{
RefreshRates();
if(x == alafim)
{
int OrdSnd_Stavka=stavka;
}
else
{
Print("222222222222. x: ",x," alafim: ",alafim);
OrdSnd_Stavka=MaxStavka;
}
//------------ kedei limnoa 2 iskaot bo zmanit ------------------
if(SalHefsedim >= A1_Limit)
{
int OrdSleep=1000*(MathRand()/32767.00000000);
Sleep(OrdSleep);
}
//---------------------------------------------------------------------
if(Seconds() != 57 && Seconds() != 58 && Seconds() != 59) return(0);
Print("Symbol: ",Symbol()," cmd: ",cmd," OrdSnd_Stavka: ",OrdSnd_Stavka," Bid: ",Bid);
ticket=OrderSend(Symbol(),cmd,OrdSnd_Stavka,Bid,144,0,0,"BO exp:60");
LastError=GetLastError();
Print("99.LastError: ",LastError);
if(LastError == 0) break;
// z++;
// }
if(LastError != 0)
{
if(IsTradeAllowed())
{
DealString="Sleeping 60H .... Error in OrderSend() function. "+ErrorDescription(LastError);
minutes=600;MyComment();
}
}
// ticket=OrderSend(Symbol(),cmd,OrdSnd_Stavka,Bid,144,0,0,"1");
if((LastError == 132) || (LastError == 4109))
{
DealString="Sleeping 1H .... Market is closed, or Trade is not allowed.";
minutes=60;sec1=1;sleep1=60;MyComment();
}
if(LastError == 131)
{
DealString="Sleeping 1H .... Invalid trade volume.";
minutes=60;sec1=1;sleep1=60;MyComment();
}
}
TicketVector[x]=ticket;
Print("7777. x: ",x," TicketVector[x]: ",TicketVector[x]," ticket: ",ticket);
}
...
}
-------------------------------------------------------------------------------------------------
С уважением,
АрБат