Вопрос по OrderSelect.

 
Ребята! Пытаюсь изучать этот язык, но, нормальной документации для "чайников" очень мало. Помогите решить одну проблемку. Для бывалых прогрвмистов как два пальца об асфальт.

//Непосредственно код.
if (OrdersTotal()<1)
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"My order #",1,0,Blue);
Variator = 0.0;
PredCena = Ask; Stop=Ask;
}
else
if ((Ask>PredCena) && (Ask>Stop))
{Stop = Ask;}
R=(Stop-Ask)*10000;
if (R>9.0)
{
/*Закрыть ордер. И поставить ордер на продажу. Ещё не знаю оператора. */
}
Вот тут и есть у меня проблема.
Знаю, есть оператор который сразу ставит обратную позицию. По определённым причинам его использовать не нужно.
Хочу пойти таким путём: Выбрать один единственный установленый ордер функцией OrderSelect и получить его тикет, а после
оператором OrderClose с применением полученогог тикета закрыть ордер.
Пожалуйста! Подскажите как правильно написать код, а то компилятор всё время ругается.
И если можно, то подробные разъяснения.
Спасибо
 
Asdvin:
Ребята! Пытаюсь изучать этот язык, но, Помогите решить одну проблемку. Для бывалых прогрвмистов как два пальца об асфальт.

Позволю себе несогласится с утверждением : " нормальной документации для "чайников" очень мало."

'Язык MQL4 для "чайников". Первое знакомство'

'Язык MQL4 для "чайников". Сложные вопросы простым языком'

'Язык MQL4 для "чайников". Технические индикаторы и встроенные функции'

а вы это читали?, неговоря уже о статьях уважаемого Rosh на которых многие учились, да и помимо этого на форуме постоянно более опытные программисты отвечают на вопросы новичков - главное иметь желание научится.

 
"Выбрать один единственный установленый ордер функцией OrderSelect и получить его тикет, а после
оператором OrderClose с применением полученогог тикета закрыть ордер.
Пожалуйста! Подскажите как правильно написать код, а то компилятор всё время ругается."

Подробные разъяснения тут
https://docs.mql4.com/ru/trading
Код
OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES)
OrderClose(OrderTicket(),OrderLots(),Bid,3);

А зачем вам тикет?!

И чему тут ругаться?! Выбрал последний ордел и закрыл!!!

Другое дело - пример применения Time[] :
   for(i=Bars-2; i>=0; i--)
     {
      if(High[i+1] > LastHigh) LastHigh = High[i+1];
      if(Low[i+1] < LastLow)   LastLow  = Low[i+1];
      //----
      if(TimeDay(Time[i]) != TimeDay(Time[i+1]))
        {
         P = (LastHigh + LastLow + Close[i+1])/3;
         R1 = P*2 - LastLow;
         S1 = P*2 - LastHigh;
         R2 = P + LastHigh - LastLow;
         S2 = P - (LastHigh - LastLow);
         R3 = P*2 + LastHigh - LastLow*2;
         S3 = P*2 - (LastHigh*2 - LastLow);
         LastLow  = Open[i];
         LastHigh = Open[i];
        }
      //----
      PBuffer[i]  = P;
      S1Buffer[i] = S1;
      R1Buffer[i] = R1;
      S2Buffer[i] = S2;
      R2Buffer[i] = R2;
      S3Buffer[i] = S3;
      R3Buffer[i] = R3;
     }
https://docs.mql4.com/ru/predefined/variables/time
Вот только не время рассматривается, а система пайвот-пойнтов! Причем с ГЛЮКОМ!!! Расчет пайвот пойнта идет правильный. Для последнего дня. Дальше перерасчет происходит с лоу = хай = опен. Поесть получаем елементарный пайвот в виде открытия дня (2*открытие + вчерашнее закрытие).
Вот это да. Вот это подарочек новичкам!
Вместо опен нужно для лоу поставить 100000 а для хай поставить 0. По-моему....
 
Asdvin:
Ребята! Пытаюсь изучать этот язык, но, нормальной документации для "чайников" очень мало. Помогите решить одну проблемку. Для бывалых прогрвмистов как два пальца об асфальт.

//Непосредственно код.
if (OrdersTotal()<1)
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"My order #",1,0,Blue);
Variator = 0.0;
PredCena = Ask; Stop=Ask;
}
else
if ((Ask>PredCena) && (Ask>Stop))
{Stop = Ask;}
R=(Stop-Ask)*10000;
if (R>9.0)
{
/*Закрыть ордер. И поставить ордер на продажу. Ещё не знаю оператора. */
}
Вот тут и есть у меня проблема.
Знаю, есть оператор который сразу ставит обратную позицию. По определённым причинам его использовать не нужно.
Хочу пойти таким путём: Выбрать один единственный установленый ордер функцией OrderSelect и получить его тикет, а после
оператором OrderClose с применением полученогог тикета закрыть ордер.
Пожалуйста! Подскажите как правильно написать код, а то компилятор всё время ругается.
И если можно, то подробные разъяснения.
Спасибо




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

if (OrdersTotal()<1) 
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"My order #",1,0,Blue);
Variator = 0.0; 
PredCena = Ask; Stop=Ask;
}
else 
if ((Ask>PredCena) && (Ask>Stop))
{Stop = Ask;}
R=(Stop-Ask)*10000;
if (R>9.0) 
{
/*Закрыть ордер. И поставить ордер на продажу. Ещё не знаю оператора.*/
   for(int pos=OrdersTotal()-1; pos>=0; pos--)
     {
     if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
       {
       if(OrderSymbol()==Symbol())
         {
       //---- 
         if(OrderType()=OP_BUY)
           {
           ticket=OrderTicket();
           }
       //----
         }               
       }
     else
       Print("Ошибка ", GetLastError());
     }
opposite=OrderSend(Symbol(),OP_SELL,0.1*2,Bid,3,0,0,"My order #",1,0,Red);
OrderCloseBy(ticket,opposite,Yellow); 
}
 
xeon:
Asdvin:
Ребята! Пытаюсь изучать этот язык, но, Помогите решить одну проблемку. Для бывалых прогрвмистов как два пальца об асфальт.


Позволю себе несогласится с утверждением :  " нормальной документации для "чайников" очень мало."

'Язык MQL4 для "чайников". Первое знакомство'


'Язык MQL4 для "чайников". Сложные вопросы простым языком'


'Язык MQL4 для "чайников". Технические индикаторы и встроенные функции'


а вы это читали?, неговоря уже о статьях уважаемого Rosh на которых многие учились, да и помимо этого на форуме постоянно более опытные программисты отвечают на вопросы новичков - главное иметь желание научится.


Вы знаете, читал! И огромное спасибо автару за эти статьи! Именно с них я и начал изучать этот язык. Но! Видимо автор очень занят или у него есть свои причины, но до "Торговых фунукций" он пока не добрался. Очень ждал, что произойдёт в третьей статье, но видимо он посчитал, что ещё рановато. Поэтому, в ожидании продажения, выдераю инфу из сети по крупицам, подслушивая разговоры "взрослых дядек". Я же не сказал, что инфы нет. Я сказал, что её мало. А если не знать конкретных ссылок и искать поисковиками, то это вообще всё, что можно найти стоящего.



Что касается "да и помимо этого на форуме постоянно более опытные программисты отвечают на вопросы новичков - главное иметь желание научится.", так я в данный момент и задаю ВАМ вопросы.
 
Можно примерно вот так, но разумееться здесь надо многое дописывать, с таким чистым видом на реалке не прокатит.
А кто ни будь может ответить по пунктам, чтого именно не хватает? Я не прошу написать за меня код, просто дать пояснения в виде:
Обязательно требуется:
1. Функция проверки ранее установленных ордеров
2. Функция анализа ошибок для таких то операторов
3....
4....
5....
И т. д.
 А вот то-то и то-то можно и не писать, но лучше это сделать.
Другими словами: Какими характеристиками должен обладать эксперт, что бы его не стыдно было показать ДЦ, да и вообще, просто знающим людям. Спасибо.
 
Asdvin:
Ребята! Пытаюсь изучать этот язык, но, нормальной документации для "чайников" очень мало. Помогите решить одну проблемку. Для бывалых прогрвмистов как два пальца об асфальт.

//Непосредственно код.
if (OrdersTotal()<1)
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"My order #",1,0,Blue);
Variator = 0.0;
PredCena = Ask; Stop=Ask;
}
else
if ((Ask>PredCena) && (Ask>Stop))
{Stop = Ask;}
R=(Stop-Ask)*10000;
if (R>9.0)
{
/*Закрыть ордер. И поставить ордер на продажу. Ещё не знаю оператора. */
}
Вот тут и есть у меня проблема.
Знаю, есть оператор который сразу ставит обратную позицию. По определённым причинам его использовать не нужно.
Хочу пойти таким путём: Выбрать один единственный установленый ордер функцией OrderSelect и получить его тикет, а после
оператором OrderClose с применением полученогог тикета закрыть ордер.
Пожалуйста! Подскажите как правильно написать код, а то компилятор всё время ругается.
И если можно, то подробные разъяснения.
Спасибо






int OrderBuy()
{
   OrderSend(Symbol(), 0, NormalizeDouble(Lot,1), Ask, 0, NormalizeDouble(Ask-Point*StopLoss,Digits), 0, 0, 0, 0, 0);
   return(0);
}
int OrderSell()
{
   OrderSend(Symbol(), 1, NormalizeDouble(Lot,1), Bid, 0, NormalizeDouble(Bid+Point*StopLoss,Digits), 0, 0, 0, 0, 0);
   return(0);
}
int CloseOnlyOrder()
{
   if(OrderType()==0)
   {
      OrderClose(OrderTicket(), OrderLots(), Bid, 0, 0);
   }
   else if(OrderType()==1)
   {
      OrderClose(OrderTicket(), OrderLots(), Ask, 0, 0);
   }
   return(0);
}
int SelectOnlyOrder()
{
   OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
   return(0);
}
Помог???