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

 
В конце строки //комментарий- всё что за двумя слэшами или как их компилятор не читает.
 
Dimka-novitsek:

1 .Выполняется, если в истории термина нет ордеров, и продолжать цикл в таком случае не имеет смысла.  

 

Спасибо!!!  Во где собака зарыта.. Вот это да!!   Как же вообще он хоть иногда модифицировался?  

2. Чтобы найти ордер, сработавший именно по тейкпрофиту надо сравнить значение ТП со значением цены закрытия ордера

Я сначала отбираю в цикле на истории именно определённый ордер, а потом, кажется, так и сравниваю. 

 

 


Если определенный ордер, то есть вы знаете номер тикета, то не нужен цикл, просто выбираете OrderSelect(ticket,SELECT_BY_TICKET, MODE_HISTORY)
 
Спасибо!!  Щас попробую!
 
Dimka-novitsek:

if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;    У меня в цикле это так- если в истории термина нет ордеров, и продолжать цикл в таком случае не имеет смысла, тогда континуэ! 

Так всё ведь так? 

Во, загадка!!! 


Тогда break или return .  continue; -- оператор продолжения цикла.
 
ilunga:

Зачем же вы сравниваете одно и тоже кучу раз подряд?

ну а вы считаете как надо сравнивать?
 
Dimka-novitsek:

 if(Stoch_1>Stoch_2) { flag1=1 ;   Print (flag1,flag2,flag3,flag4); }
   

if(Stoch_1<Stoch_2 && flag1==1) flag2=1; Print (flag1,flag2,flag3,flag4); }
   
  if ((Stoch_1>Stoch_2) && flag1==1 && flag2==1) {flag3=1;  Print (flag1,flag2,flag3,flag4);PlaySound("alert.wav");}

   
if(Stoch_1<Stoch_2 && flag1==1 && flag2==1 && flag3==1) flag4=1;
{Print (flag1,flag2,flag3,flag4);}
if(Stoch_1>Stoch_2 && flag1==1 && flag2==1 && flag3==1 && flag4==1)
{OrderSend (Symbol( ), OP_SELL, 0.01 ,Bid, 0, 0, 0, NULL, 450, 0, CLR_NONE);
Print ("OUT");}



flag1=0;
flag2=0;
flag3=0;
flag4=0;

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


и хотя в компиляторе-то ваш код  выдал 24 ошибки!!! все равно спасибо даже за небрежную помощь.... за идею... (теперь работает - хотя я в приципе так пытался делать но пунктуация подвела)
 

опять задумался что такое индекс позиции. Если это порядковый номер позиции в истории то что тогда делает эта функция

 

GetIndexLastPos          Индекс последней открытой позиции или -1    ???

 

индекс последней открытой - всегда 1 ибо она самая последняя !!

явно я неправильно понимаю ИНДЕКС...

подскажите кто знает? 

 
lottamer:

ну а вы считаете как надо сравнивать?

Начнем:

1. Если  if(Stoch_1>Stoch_2) flag1=1 ; , то следующее за ним условие (Stoch_1<Stoch_2 && flag1==1) в принципе не может быть true, так как если Stoch_1<Stoch_2    flag1==0, а если flag1==1, то Stoch_1>Stoch_2. то же самое со всеми последующими условиями в этой функции, так что изменить значение может только флаг 1. То есть ваша программа выполнит первые две строки, пропустит  третью , выполнит  четвертую , пропустит  пятую , выполнит шестую, выполнит седьмую и пропустит все остальные.  


	          
 
xant:

TarasBY,

 Var1 и прочие назвал как у меня, вставил блок fGet_MineGV() внутри init, а блок  fSave_MineGV()  внутри staft.

При компиляции советник выдал кучу ошибок.

Я попробовал по очереди. Сначала вставил в    init, откомпилировал. Ошибок 0, одно замечаание: is not referenced and willbe removed from exp-file. Ну тут мне понятно, он не может найти файл, потому что того еще нет. Он должен записаться внутри  staft.

Так вот, когда я пытаюсь второй блок прописать внутрь  staft, он и выдает множество ошибок. 

Структурный алгоритм:

int init()
{
    fGet_MineGV();
}
int start()
{
    fSave_MineGV();
}
double Var1, Var2, Var3, Var4;  // 4-ре переменных для сохранения (у Вас они свои !!!)
void fSave_MineGV (string fs_PrefName = "")     // префикс имени переменной
{
    static datetime ldt_NewBar;
    datetime ldaTBeginBar = iTime (Symbol(), 1, 0);
//----
    //---- Сохраняемся в начале каждой минуты
    if (ldt_NewBar == ldaTBeginBar) return;
    ldt_NewBar = ldaTBeginBar;
    //---- Сохраняем поочереди значения каждой переменной
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
    GlobalVariableSet (ls_Name, Var1);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    GlobalVariableSet (ls_Name, Var2);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    GlobalVariableSet (ls_Name, Var3);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    GlobalVariableSet (ls_Name, Var4);
//----
}
// в init()
void fGet_MineGV (string fs_PrefName = "")     // префикс имени переменной
{
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
//----
    //---- Восстанавливаем значения переменных
    if (GlobalVariableCheck (ls_Name)) Var1 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    if (GlobalVariableCheck (ls_Name)) Var2 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    if (GlobalVariableCheck (ls_Name)) Var3 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    if (GlobalVariableCheck (ls_Name)) Var4 = GlobalVariableGet (ls_Name);
//----
}

Вы, конечно же так сделали??? И не компилируется???

 
lottamer:

опять задумался что такое индекс позиции. Если это порядковый номер позиции в истории то что тогда делает эта функция

 

GetIndexLastPos          Индекс последней открытой позиции или -1    ???

 

индекс последней открытой - всегда 1 ибо она самая последняя !!

явно я неправильно понимаю ИНДЕКС...

подскажите кто знает? 


индекс последней открытой - всегда 1 ибо она самая последняя !!  Не 1, а 0, и не в истории. В истории 0 -- индекс последней закрытой позиции или последнего удаленного ордера, и не всегда, так как кроме рыночных, есть еще и отложенные ордера, которые позициями не являются.Крме того индекс 0 может быть у позиции, открытой по другому инструменту. 
Причина обращения: