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

 
alsu:
скорее не "должны иметь тип double", а "хранятся в глобальной переменной в виде double". Почувствуйте

Доброго времени суток. Попытался "почувствовать разницу" и вот, что из этого вышло… Т.е. можно (с некоторой натяжкой) ОБРАЗНО определить GV-переменную следующим образом. GV-переменная – это, так сказать, "коробка", в к-ю можно положить "на хранение" переменную любого типа (кроме string, т.к. GV-переменная имеет только тип double, а по правилу приведения типов понижение типа не допускается, т.е. нельзя из string сделать double). И эта переменная, к-ю мы вложим в GV-переменную "примет форму этой коробки" (т.е. из исходного типа будет приведена в тип double)... Вообщем как-то так?

Заранее благодарю за ответ.
 

Доброго времени суток. Вопрос следующего содержания. В книге С.К. по MQL4, в главе "Торговые операции" в разделе "Модификация ордеров" приведен пример простого скрипта, модифицирующего отложенный ордер, заявленная цена которого находится ближе к месту прикрепления скрипта, чем цены других отложенных ордеров (modifyorderprice.mq4), следующего содержания:

//--------------------------------------------------------------------
// modifyorderprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                                     // Спец.функция start
  {
   int Tral=10;                                 // Дист. приближения
   string Symb=Symbol();                        // Финанс. инструмент
   double Dist=1000000.0;                       // Предустановка
   double Win_Price=WindowPriceOnDropped();     // Здесь брошен скрипт
//--------------------------------------------------------------- 2 --
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         //------------------------------------------------------ 3 --
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         if (OrderType()<2) continue;           // Рыночный ордер  
         //------------------------------------------------------ 4 --
         if(NormalizeDouble(MathAbs(OrderOpenPrice()-Win_Price),Digits)
            < NormalizeDouble(Dist,Digits))     // Выбираем ближайший
           {
            Dist=MathAbs(OrderOpenPrice()-Win_Price);// Новое значение
            int    Tip   =OrderType();          // Тип выбранного орд.
            int    Ticket=OrderTicket();        // Номер выбранн. орд.
            double Price =OrderOpenPrice();     // Цена выбранн. орд.
            double SL    =OrderStopLoss();      // SL выбранного орд.
            double TP    =OrderTakeProfit();    // TP выбранного орд.
           }                                    // Конец if
        }                                       // Конец анализа ордера
     }                                          // Конец перебора орд.
//--------------------------------------------------------------- 5 --
   if (Tip==0)                                  // Если отложенных нет
     {
      Alert("По ",Symb," отложенных ордеров нет");
      return;                                   // Выход из программы
     }
//--------------------------------------------------------------- 6 --
   while(true)                                  // Цикл закрытия орд.
     {
Или в данном скрипте в блоке 5-6 ошибка, т.к. (как мне видится) строка
if (Tip==0)                                  // Если отложенных нет
Должна иметь вид
if (Tip<2)                                  // Если отложенных нет
поскольку все типы НЕотложенных (рыночных) ордеров имеют тип 0 или 1, т.е меньше 2.

Или я чего-то не так понял.

Вопрос: внесите пожалуйста ясность: если я что-то не так понял, то подскажите, что именно?

Заранее благодарю за ответ

 
7777877:

Доброго времени суток. Вопрос следующего содержания. В книге С.К. по MQL4, в главе "Торговые операции" в разделе "Модификация ордеров" приведен пример простого скрипта, модифицирующего отложенный ордер, заявленная цена которого находится ближе к месту прикрепления скрипта, чем цены других отложенных ордеров (

Или в данном скрипте в блоке 5-6 ошибка, т.к. (как мне видится) строка

Должна иметь вид

поскольку все типы НЕотложенных (рыночных) ордеров имеют тип 0 или 1, т.е меньше 2.

Или я чего-то не так понял.

Вопрос: внесите пожалуйста ясность: если я что-то не так понял, то подскажите, что именно?

Заранее благодарю за ответ

уважаемый... незачем такими крупными буквами тут писать... а то и глаза можно сломать :-)

и это... прежде чем вопросы задавать.. ты не пробовал в Метаедиторе СПРАВКУ прочитать? ВСЮ? для начала... чтобы не задавать глупостей насчёт типов и прочего....

===

Тип операций для функции OrderSend(). Mожет быть любым из следующих величин:

Константа Значение Описание
OP_BUY 0 Покупка
OP_SELL 1 Продажа
OP_BUYLIMIT 2 Отложенный ордер BUY LIMIT
OP_SELLLIMIT 3 Отложенный ордер SELL LIMIT
OP_BUYSTOP 4 Отложенный ордер BUY STOP
OP_SELLSTOP 5 Отложенный ордер SELL STOP
 

а по типу - там всё нормально... именно ==0 должно быть...

ибо в 3ьем блоке

      if (OrderType()<2) continue;           // Рыночный ордер  

рыночные ордера пропускаются...

===

а если отложки встретятся в списке ордеров - то переменная ТИП будет Не равна 0

---

 

Добрый день. Подскажите пожалуйста.

К примеру у нас есть критерий прохода MA через уровень Level_R и Level_S:

int Criterion;
double MA_1=iMA(......,0);
double MA_2=iMA(......,1);
double MA_3=iMA(......,2);
if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 MA_3 <= Level_S_3) Criterion=1;
if(MA_1 > Level_R_1 && Ma_2 <= Level_R_2 MA_3 <= Level_R_3) Criterion=2;

Вопрос: как запомнить Criterion, что бы он держал значение 1 или 2 (в зависимости от прохода) до наступления нового прохода а не обнулялся на последующих тиках .

 
вынеси определение переменной За пределы Start или другой функции... в глобальные переменные заделай...
 
Aleksander:
вынеси определение переменной За пределы Start или другой функции... в глобальные переменные заделай...
Я так пробовал, и он ругался... намекая мне на мою не компетентность.
 
тогда, если текст небольшой - весь выложи.. строчек 20-30 если, не более
 
int Criterion, Crit;
int start()
 {
  Crit= Fun_Criterion( Criterion); 

  switch(Crit)
   {
   /************/
   }
return(0);
 }

Fun_Criterion(int Criterion)
 {
  if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 MA_3 <= Level_S_3) Criterion=1;
  if(MA_1 < Level_R_1 && Ma_2 >= Level_R_2 MA_3 >= Level_R_3) Criterion=2;

  return(Criterion);
 }
 

а зачем тут посредники? и функция ФУН какая?

int Criterion;
int start() {
  Fun_Criterion(); 

  switch(Criterion)
   {
   /************/
   }
  return(0);
}
//-----------------------------
void Fun_Criterion() {
  if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 && MA_3 <= Level_S_3) Criterion=1;
  if(MA_1 < Level_R_1 && Ma_2 >= Level_R_2 && MA_3 >= Level_R_3) Criterion=2;
 }

и И && не стоит вроде там где надоть...

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