ONLY CANDLE / BAR - Как каталогизировать или разделить свечи? - ПОЖАЛУЙСТА, ПОПРАВЬТЕ МЕНЯ!

 


ТОЛЬКО СВЕЧА - Как каталогизировать или разделить свечи?

ПОЖАЛУЙСТА, ПОПРАВЬТЕ МЕНЯ!



У нас есть бычья и медвежья свеча, я хочу разделить их.

Это как пастух. Упастуха есть ферма, участок и овцы.

Когда наступает время стричь овец, пастух мистер Джон идет на ферму, ловит овец и...

Первая пойманная овца слишком мала для бритья - Джон отпустил ее.

Следующая овца хорошая Джон берет ножницы и бреет овцу наголо.

Следующая овца хорошая и с большой шерстью - Джон берет большие ножницы, а овца голая.

Следующая овца - Овен - Джон берет нож, а Овен в этот момент евнух.


Я хочу сделать то же самое со свечами / барами.
Наша свеча идет Bar[0].... мы ждем..... она идет, мы ждем.... 15 минут (M15) и вот оно! ... что это? Проверьте!

Если у меня свеча Bullisch и свеча (цена открытия [1]- цена закрытия [1]) имеет 2 пункта слишком мало - отпустите, мы ничего не делаем.



Если свеча Bullisch и свеча (цена открытия [1]- цена закрытия [1]) имеют 4 пункта - запускаем программу.

CheckForOpenS1(); запускаем функцию покупки, если наша цена на 4 пункта выше нашей свечи (сценарий1)

Если у меня есть свеча Bullisch и свеча (цена открытия [1]- цена закрытия [1]) имеет 5 пунктов - это очень большая свеча - тогда запускаем программу

CheckForOpenS2(); запустите функцию покупки, если наша цена получит + 14 пунктов выше нашей свечи (сценарий2)



Я хочу, чтобы эта ведьма делала это каждую свечу, я хочу запускать программу ПОКУПКИ, если у меня большая свеча, если у меня слишком маленькая свеча, я буду ждать следующей.

Так... это правильно, но у меня есть идея :)

Пожалуйста, не пишите не нужные вещи.

int start() // start program 
   
double bear() // check first candle -mabey is bear? = THIS IS aur NEW function title bear body is in()
   {     // start body
      double A=Open[1];  // stay Open[1] is changeable A
      double B=Close[1];  // stay Open[1] is changeable A    
      double C=A-B;         // result
      return(C);              // take result C and put in to function bear()
   }                              //end body, NOW bear is aur C example 6 or 89 ;212; 1; 2;..;;;.
   
double bull() // check first candle -mabey is bull
   {
      double A=Open[1];   // we use double because euro/usd have point example 1.9865
      double B=Close[1];     
      double C=B-A;
      return(C);
   }

// when we have bull catalog/ segregate  him..
switch(bull())
      { 
         case 1 : break;            // nothing happen
         case 2 : break;            // nothing happen
         case 3 : break;            // nothing happen
         case 4 : CheckForOpenS1(); break; // start CheckForOpenS1()- take it and go thrue with this.. we will see want is '...S1'
         case 5 : CheckForOpenS2(); CheckForOpenS3() break; // start CheckForOpenS2() and S3 ....
      }

// when we have bears catalog/segregate him..
switch(bears())
      { 
         case 1 : break;
         case 2 : break;
         case 3 : break;
         case 4 : CheckForOpenY1(); break;// start CheckForOpenY1()- take it and go thrue with this.. we will see want is '...Y1'
         case 5 : CheckForOpenY2(); CheckForOpenY3(); break; // start CheckForOpenY2() and Y3
      }


return(); // exit program wait for new tip, and ower and ower ....
}  // end


 
 

Как вы думаете, смогут ли люди, не говорящие по-английски, понять вашу историю? Я понимаю овец и пастухов, мистер Джон, но рассказ не имеет для меня смысла. (Может быть, это я... так что извините).

Не могли бы вы объяснить свою проблему на "международном английском", используя общие определения для трейдинга/mql4?

Что означает это предложение?

<br / translate="no"> ПОЖАЛУЙСТА, НЕ ПИШИТЕ ТЕМУ, это может стать учебникомдля остальных людей.
 
kronin:

Как вы думаете, смогут ли люди, не говорящие по-английски, понять вашу историю? Я понимаю овец и пастухов, мистер Джон, но рассказ не имеет для меня смысла. (Может быть, это я... так что извините).

Не могли бы вы объяснить свою проблему на "международном английском", используя общие определения для трейдинга/mql4?

Что означает это предложение?

Kronin, возможно, это была просто ошибка в онлайн-переводчике, такое постоянно случается на форуме.
 

ONLY CANDLE - Как открыть позицию? - это должно быть следующей темой. Модератор, что вы думаете? Можно?

Реализуем выбранный сценарий
Как отправить заказ?

int start() // start program 
{

// We have some function here like "int CalculateCurrentOrders(string symbol)" and  "double LotsOptimized()"
// many different thing, suddenly! we have our "CheckOpen();" 

//--------------------------------

void CheckOpen()      // void - because function return nothing
{                     // start body
   int    res;        // we will use changeable "res" this is "int" value
   if( Bid==Close[1]+4*Point)  // check conditions: Bid or Ask must be 4 Point above a BAR if no - nothing happen if Yes go below
     {               // start body if
      res=OrderSend(Symbol(),OP_SELL,0.02,Bid,0,Open[1]+37*Point,0,"",MAGICMA,0,Red);  // start "res" and "res" is sending message to platform to open position 
                     // what position is in "()" allways must be the same sequence symbol , op_*** , lot size , ...)
      return;        // if "res" do it then retunrn too ... y ... "if". Because "if" is done return too CheckOpen(). Because "CheckOpen()" is done stop and end.
     }               // stop body if

  }                  // stop body function "void CheckOpen()"
  
//-------------------------------- 

У нас есть один ордер.
Но что я должен сделать, чтобы открыть две позиции в одной функции?
У нас есть сценарий CheckForOpenS1() в этом сценарии Мы покупаем два раза, если наша цена будет в правильном месте, конечно.

//--------------------------------  


 
void CheckOpen1()      // define first function
{                     
   int    res;       
   if( Bid==Close[1]+4*Point)  
     {               
      res=OrderSend(Symbol(),OP_SELL,0.02,Bid,0,0,0,"",MAGICMA,0,Red);  
                     
      return;        
     }               

}   
  
void CheckOpen2()      // define second function
{                     
   int    res;       
   if( Bid==Close[1]+8*Point)  // change 8 Point ( 4 ==> 8 )
     {               
      res=OrderSend(Symbol(),OP_SELL,0.02,Bid,0,0,0,"",MAGICMA,0,Red);  
                     
      return;        
     }               

}   

//       I DONT KNOW..............

//--------------------------------  / our scenario  
void CheckForOpenS1()= true;      
 
  void CheckOpen1()
  void CheckOpen2()
  
  
//--------------------------------  / OR LIKE THESE
int res;
if ( CheckForOpenS1() == true)
 {
 res= CheckOpen1() CheckOpen2();
 }
 
Wodzuuu:

ONLY CANDLE - Как открыть позицию? - это должно быть следующей темой. Модератор, что вы думаете? Могу ли я?

Реализуем выбранный сценарий
Как отправить ордер?

У нас есть один ордер.
Но что я должен сделать, чтобы открыть две позиции в одной функции?
У нас есть наш сценарий CheckForOpenS1() в этом сценарии Мы покупаем два раза, если наша цена будет в правильном месте конечно

Я не очень понимаю, о чем вы спрашиваете... вы не очень ясно выражаетесь... или, может быть, это только я.

Этот код вызовет у вас проблемы...

if( Bid == Close[1] + 4 * Point)

Прочитайте эту тему:Может ли цена != цена?

 

может быть иначе
как написать простой советник с несколькими сценариями развития событий

была маленькая свеча - открываем Особенности 1
была средняя свеча - открываем Особенности 2
была большая свеча - открываем Особенности 3


switch () подходит для этого момента, я думаю

Функция 1 открывает 1 позицию и обязательно закрывает
Функция 2 открывает 2 позиции, охраняя их , и закрывает
Функция 3 открывает 2 позиции , но по другой цене ....

каждый раз, когда у нас есть свеча, каждый раз есть другая функция , которая делает разные вещи
.

Я знаю , что вы не можете писать за меня, но любой совет....

 

Как и обещал, я посмотрел на это снова, но это все еще не имеет смысла для меня, мне жаль.

Это никогда не сработает:

double bull() // check first candle -mabey is bull
   {
      double A=Open[1];   // we use double because euro/usd have point example 1.9865
      double B=Close[1];     
      double C=B-A;
      return(C);	// <-- C is probably never 1,2,3,4,5.....
   }

// when we have bull catalog/ segregate  him..
switch(bull())		// <-- the expression here is something like 0.00123. None of your case statements will be executed.
      { 
         case 1 : break;            // nothing happen
         case 2 : break;            // nothing happen
         case 3 : break;            // nothing happen
         case 4 : CheckForOpenS1(); break; // start CheckForOpenS1()- take it and go thrue with this.. we will see want is '...S1'
         case 5 : CheckForOpenS2(); CheckForOpenS3() break; // start CheckForOpenS2() and S3 ....
      }

Читайте здесь о том, как использовать switch: https://docs.mql4.com/basis/operators/switch.

Это вообще непонятно:

void CheckOpen2()      // define second function
{                     
   int    res;       
   if( Bid==Close[1]+8*Point)  // change 8 Point ( 4 ==> 8 )
     {               
      res=OrderSend(Symbol(),OP_SELL,0.02,Bid,0,0,0,"",MAGICMA,0,Red);  
                     
      return;        
     }               

} 

Равное выражение, возможно, нежелательно, но каким оно должно быть?

Если оно должно читаться как <, то при появлении нового бара будет немедленно отправлен ордер SELL (так как цена открытия нового бара может быть <, чем цена закрытия предыдущего бара+8*Point).
Если это значение >, то он будет ждать, пока цена немного поднимется, а затем пошлет ордер SELL. Я не совсем понимаю вашу стратегию, так что, возможно, она должна быть такой.

Я также могу представить, что вы имеете в виду:

if(Bid<Close[1]-8*Point)   

Вы торгуете с 4-х значным брокером, где 1 Point равен 1 Pip? В противном случае цена должна двигаться только на 0.8 пункта, что также, вероятно, не то, что вы хотите (И спред может дополнительно запутать его).

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

 

Моя стратегия заключается в следующем
если свеча появляется BULL от 4 до 5 пункта , после свечи (когда-либо, при любых условиях) готовьтесь отправить два ордера на покупку (если цена достигнет нашего требуемого уровня для покупки одного, и как достичь buy2)

если свеча появляется BULL от 6 до 7 пункта, после свечи (когда-либо, при любых условиях) приготовьтесь отправить триордера на покупку (если цена достигнет нашего требуемого уровня для покупки одного, и как достичь buy2и 3)

У меня есть небольшая ошибка где-то в Bid или Ask, почему советник не работает ... (я не могу найти эту ошибку , но обычно советник работает очень хорошо для того, что я написал ... покупает и закрывает) , но это показывает мой технический план.

Я ИСПРАВИЛ, ТЕПЕРЬ ОН РАБОТАЕТ.

Как вы смотрите на дно он становится очень переполненным и иногда заменяет сценарии советника Bull4 и сценарий открывается Bull6 Bull4 и как я понял он внезапно передумал и закончить Bull6 Bull6
Можно ли это упростить ?

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA  20050610


//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS                    |
//+------------------------------------------------------------------+

int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
//---- return orders volume
   return(buys);
  }

//+------------------------------------------------------------------+
//| Calculate candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
   return(true);
   } 

bool BULL6()
   {
   if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
   return(true);
   }
      
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
 
void CheckForOpenBULL41()
  {
   int    res;
   if(Bid==Close[1]+3*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
      return;
     }
  }
  
void CheckForOpenBULL42()
  {
   int    res;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
      return;
     }
  }  
  
void CheckForOpenBULL61()
  {
   int    res;
   if(Bid==Close[1]+4*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }
  
void CheckForOpenBULL62()
  {
   int    res;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }

void CheckForOpenBULL63()
  {
   int    res;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

void CheckForCloseBULL()
{
   RefreshRates();
   if(OrderOpenPrice()+4*Point< Ask)
   for (int i = OrdersTotal(); i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);

      }
   }
} 

  
  
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
   
   if(BULL4()==true && CalculateCurrentOrders(Symbol())==0) CheckForOpenBULL41();
   else                                    CheckForCloseBULL();

   if(CalculateCurrentOrders(Symbol())==1) CheckForOpenBULL42();
   else                                    CheckForCloseBULL();
   
   //---//
   
   if(BULL6()==true && CalculateCurrentOrders(Symbol())==0) CheckForOpenBULL61();
   else                                    CheckForCloseBULL();

   if(CalculateCurrentOrders(Symbol())==1) CheckForOpenBULL62();
   else                                    CheckForCloseBULL();
   
   if(CalculateCurrentOrders(Symbol())==2) CheckForOpenBULL63();
   else                                    CheckForCloseBULL(); 
    
   if(CalculateCurrentOrders(Symbol())==3) CheckForOpenBULL63();
   else                                    CheckForCloseBULL(); 
       
   if(CalculateCurrentOrders(Symbol())==4) CheckForCloseBULL();
  }
//+------------------------------------------------------------------+

 
Wodzuuu:

Моя стратегия заключается в следующем
если свеча BYK появляется от 4 до 5, после свечи (когда-либо, при любых условиях) готовьтесь отправить два ордера на покупку данных (если цена достигает нашего необходимого уровня, чтобы купить один, и как достичь zkup 2)

если появляется свеча BYK от 6 до 7, после свечи (когда-либо, при любых условиях) готовьтесь отправить три ордера на покупку (если цена достигнет нашего требуемого уровня для покупки одного, и как достичь zkup 2 и 3)

У меня есть небольшая ошибка где-то в Bid или Ask, почему советник не работает ... (я не могу найти эту ошибку , но обычно советник работает очень хорошо для того, что я написал ... покупает и закрывает) , но он показывает мой технический план.

Как вы смотрите на дно он становится очень переполненным и иногда заменяет сценарии советника Bull4 и сценарий открывается Bull6 Bull4 и как я понял он внезапно передумал и закончить Bull6 Bull6
Можно ли это упростить ?

BYK ??

Это неправильно...

for (int i = OrdersTotal(); i >= 0;i--)

... позиции начинаются с 0, поэтому отсчет нужно вести от OrdersTotal() - 1.


Вы делаете это ... ... .

void CheckForCloseBull()           // close ALL AT ONCE buy of course
{
   RefreshRates();
   if(  OrderOpenPrice()  > Ask+6*Point)

. . Вы получаетеOrderOpenPrice(), но для какого ордера? У вас будет несколько открытых ордеров. ...



Вы используете переменнуюres для хранения возвращаемого значения из ваших вызовов OrderSend() ... и что вы с ней делаете? Ничего, почему?

Что такое возвращаемые значения функций? Как мне их использовать?

 

Очень хороший ответ RaptorUK


1. проблема с разрешением
Я изучаю EA Moving Average разрешение есть только 3 раза, все как функция времени, после для него не существует.

Впервый раз он используется для информации "привет мы будем использовать res"

второй раз для отправки заказа. OrderSend возвращает количество заказов, то есть наш res = 343321, а вот функция 'void CheckForOpen () " res не существует.

но...
Я думаю , что если "void CheckForOpen ()". Наблюдать за истиной этой команды OrderSelect как-то принести это число, кроме "void CheckForOpen ()" я попробую ...

2. Проблема с OrderOpenPrice()

Вы абсолютно правы, но этот синтаксис работает на удивление хорошо :) я попробую сделать что-нибудь в этом месте

3. OrdersTotal() - 1Вы абсолютно правы,

4. BYK (POLAND)= BULL переводчик имеет проблему

 

Для тех, кто до сих пор не понял моего советника напишите рассказ: D хе-хе


Все действия, которые мы выполняем, являются функциями. Я сейчас пишу на компьютере - это одна функция,я смотрю телепередачу - этовторая функция и т.д.
Теперь давайте перенесемся на кухню ...
У нас есть кулинарная книга, открываем оглавление и читаем последовательно пункты
Первый Как приготовить свиные отбивные - положите мясо в миску, добавьте соль, перец, очистите картофель.
Слева события - справа особенности, а несколько тем - нет разве что легких!


Прочитав, как приготовить свиные отбивные,начинаю делать это, делать дела. Стейк готовится 25 минут, и как я начал иметь конец.
Прошло пять минут M5 ( пять минут спустя)мы начинаем читать следующий пункт кулинарной книги.
Второй Как сделать салат - почистить морковь, почистить лук, и прочую фигню.


И здесь происходит волшебство, потому что он создал двойной, кленовый (второе лицо). Мы делаем это на свиных отбивных и салате одновременно .Мы начинаемиметь на кухне двух человек в одном.

Чем больше очков вы на бираете, тем больше людей на кухне появляется. Люди на кухне исчезнут после выполнения своих обязанностей и мытья посуды.


Событие - свечи - имеет различные варианты купли-продажи или закрытия.

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