Пожалуйста, проконсультируйте меня относительно спреда - страница 3

 
EA starts 
---> Does nothing till there is 0 or 1 order 
----> Makes a 'call open sound' when 2nd order gets triggered 
----> Closes both orders at X amount of pure profit [after considering spread] and makes a 'call close sound' ]

of course, call open and call close sound files can be any small wave files.. easily available on mt4 itself. .. 
I think these things can be achieved in the above EA that I had posted by changing a few things !
Вау... то, что вы хотите, в принципе, довольно легко закодировать.
 
deysmacro:
Вау ... то, что вы хотите, в принципе, довольно легко закодировать.


Можете ли вы направить меня к этому? У меня уже есть это из Интернета

//+------------------------------------------------------------------+
//|                    CloseTrades_After_Account_Profit_Reached.mq4  |
//|                                     Copyright © 2007, Tradinator |
//|                                          tradinator.fx@gmail.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, Tradinator"
#property link      "tradinator.fx@gmail.com"


                                       
extern double My_Money_Profit_Target=100;     //The amount of money profit at which you want to close ALL open trades.
extern string Profit_Target= "Enter above To Close all OPEN trades when amount of profit is Reached in Account and not per OPEN trade! ";
                                          
int Slippage=5;
int i;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start()
{
if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
       int type   = OrderType();
               
       bool result = false;
              
       switch(type)
          {
          //Close opened long positions
          case OP_BUY  : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,Pink);
                         break;
               
          //Close opened short positions
          case OP_SELL : result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,Pink);
                          
          }
          
       if(result == false)
          {
            Sleep(0);
          }  
       }
      Print ("Account Profit Reached. All Open Trades Have Been Closed");
      return(0);
   }  
   
   Comment("Balance: ",AccountBalance(),", Account Equity: ",AccountEquity(),", Account Profit: ",AccountProfit(),
           "\nMy Account Profit Target: ",My_Money_Profit_Target);
   
  return(0);
}

Теперь, я ясно дал понять, что я не кодер, но я думаю, что мне нужна строка ниже "int start()", которая подсчитывает количество ИСПОЛНЕННЫХ [не отложенных] ордеров и затем переходит к следующему коду, только если их 2, и выполняет остальной код... if (AccountProfit()>= My_Money_Profit_Target)... etc.

правильно? Как сказать такую строку на MQL?

int start()
{
 {
   if (Ordertotal()<=1)  ------>   See , something here which says only execute lower code if total executed orders are two else dont go to lower code.. I know that syntax is totally busted, trying to push the concept                                                                                                             
                                   as a weak non coder mind ;( .. so till total open orders are less than or equal to 1 means not 2, the code below that line wont come into play !         

      if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
 
thrdel:

Да, деВрис,

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

Вы же понимаете, что этот код не является коммерческим советником, предназначенным для продажи привередливому клиенту, верно Мы пытаемся что-то решить, и если вы не хотите помочь, вы должны по крайней мере оставить это в покое.

Вы действительно считаете, что если я несколько раз изменю временной интервал..... что? Проскальзывание будет 3000000? Не в моем MT4, очевидно. И если вы мне не верите, проведите тест сами.

Мой тест говорит, что когда вы меняете таймфреймы, советник проходит цикл deinit/init, и так как упомянутый код находится в OnInit, Slippage каждый раз будет на уровне 30 пунктов.

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

И нет, это не поддельная картинка, она реальная, вы можете проверить время смены каждого таймфрейма.

Надеюсь, это поможет.


это не работает .....

для многих сделок prc не является правильной ценой

что вы можете сказать об этом...

читайте Двойные вызовы OnInit() и OnDeinit()

есть проблемы с новыми версиями

(Проблема двойного OnInit(), похоже, исправлена в билде 628, но в этой версии еще нет)

 
deVries:

это не работает .....

для многих сделок prc не является подходящей ценой

Что вы можете сказать по этому поводу...

хе-хе, теперь вы двое углубились в кроличью нору и обсуждаете что-то, что заставляет птиц летать над моей головой! xD ... не могли бы вы посмотреть на ту отстойную строчку кода, которую я добавил? =D

 
tatyawinchu:

хе-хе, теперь вы двое углубились в кроличью нору и обсуждаете что-то, что заставляет птиц летать над моей головой! xD ... не могли бы вы посмотреть на ту отстойную строчку кода, которую я добавил? =D


Правильные Ask и Bid - это цены chartSymbol, если сделка совершается по другому символу, то цена закрытия будет неверной.

       if(result == false)
          {
            Sleep(0);
          }  

Какой эффект это даст?

он не работает???? OrderType это отложенная сделка ????

или закрытие не происходит

в этом случае вам нужно получить последнюю ошибку GetLastError(), зная причину.

 
tatyawinchu:

Советник запускается ---> Ничего не делает, пока не будет 0 или 1 ордер ----> Издает звук "call open", когда срабатывает второй ордер ----> Закрывает оба ордера с X суммой чистой прибыли [после учета спреда] и издает звук "call close" ].

конечно, звуковые файлы call open и call close могут быть любыми маленькими волновыми файлами... легко доступными на самом mt4. ... Я думаю, что эти вещи могут быть достигнуты в вышеупомянутом советнике, который я разместил, изменив несколько вещей! хехехе помогите мне plz =D

Привет, tatyawinchu,

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

Стоп-лосс на основе счета существует для защиты любого, кто хочет его использовать, и я бы никогда не рекомендовал находиться на рынке без хотя бы аварийного стопа, если у вас есть 10 000 на вашем счете, и вы хотите рискнуть всем, просто установите StopLossLimit на 10 000.

Решайте сами.

Теперь вернемся к коду, это так же просто, как 1, 2, 3:

1. Если вы прочитаете код в функции OnTick - это та часть, которая выполняется на каждом тике - вы увидите, что первое, что она делает, это : CountMyOrders. Надеюсь, вы это поняли. Далее, если myOrders <1, значит ордеров еще нет, проверяет эквити счета, запоминает его и все.

Больше ничего не делает. Следующий тик, если ордеров все еще нет, снова ожидание. Довольно скучно быть советником, не так ли?

2.Когда ордер размещен, myOrders<1 больше не является истиной, поэтому на следующем тике он переходит на следующую строку и вычисляет прибыль для ордера или ордеров, которые находятся в рынке.

3.Далее, он сравнит сумму прибыли всех ордеров с целевой прибылью.

Легко, не правда ли? Если прибыль достигает цели, в следующей строке написано : ExitAll . И на экране появится оповещение (со звуком) о том, что ордера достигли цели!

Не так уж и плохо, не правда ли?

И я забыл упомянуть, если рынок идет против вас и потеря капитала достигает заданного уровня, он выведет вас с рынка, чтобы защитить весь оставшийся капитал.

И это лучшая помощь, которую я могу вам дать.

Если вам нужно что-то большее, то это, вероятно, работа для тех, кто занимается более сложным кодом, чем этот.

Надеюсь, это поможет.

Ваше здоровье

 
thrdel:

Здравствуйте, tatyawinchu,

Я полагаю, что вы не очень хорошо поняли, что делает советник. Позвольте мне провести вас шаг за шагом, и вы решите, можете ли вы использовать его для своей цели или нет.

Стоп-лосс на основе счета существует для защиты любого, кто хочет его использовать, и я бы никогда не рекомендовал быть на рынке без хотя бы аварийного стопа, если у вас есть 10 000 на вашем счете, и вы хотите рискнуть всем, просто установите StopLossLimit на 10 000.

Решайте сами.

Теперь вернемся к коду, это так же просто, как 1, 2, 3:

1. Если вы прочитаете код в функции OnTick - это та часть, которая выполняется на каждом тике - вы увидите, что первое, что она делает, это : CountMyOrders. Надеюсь, вы это поняли. Далее, если myOrders <1, значит ордеров еще нет, проверяет эквити счета, запоминает его и все.

Больше ничего не делает. Следующий тик, если ордеров все еще нет, снова ожидание. Довольно скучно быть советником, не так ли?

2.Когда ордер размещен, myOrders<1 больше не является истиной, поэтому на следующем тике он перейдет к следующей строке и вычислит прибыль для ордера или ордеров, которые находятся в рынке.

3.Далее он сравнит сумму прибыли всех ордеров с целевой прибылью.

Легко, не правда ли? Если прибыль достигает цели, в следующей строке написано : ExitAll . И на экране появится оповещение (со звуком) о том, что ордера достигли своей цели!

Не так уж и плохо, не правда ли?

И я забыл упомянуть, если рынок идет против вас и потеря капитала достигает заданного уровня, он выведет вас с рынка, чтобы защитить весь оставшийся капитал.

И это лучшая помощь, которую я могу вам дать.

Если вам нужно что-то большее, то это, вероятно, работа для тех, кто занимается более сложным кодом, чем этот.

Надеюсь, это поможет.

Ваше здоровье


Хм... похоже, мы отдаляемся друг от друга...

Мое точное требование следующее:-

Шаг 1 Советник запускается.

Шаг 2 Советник проверяет текущую прибыль на счете, чтобы знать начальную точку для расчета.

Шаг 3 Советник проверяет наличие запущенных открытых ордеров [не отложенных].

Шаг 4 Советник ничего не делает, если нет ни одного работающего ордера ИЛИ есть только ОДИН работающий ордер.

Шаг 5 Советник издает звук, когда срабатывает ВТОРОЙ ордер. Этот второй ордер будет на другой паре.

Шаг 6 Эксперт закрывает ОБА ордера с прибылью X после учета SPREAD и делает звук.... здесь ОБА должны быть ВСЕ открытые ордера ... не нужно удалять отложенные ордера.

Что советнику не нужно... установка SL или TP любого вида...

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

[ Хотя логически я чувствую, что это не будет сложно, скорее очень просто, потому что советник активирует закрытие ВСЕХ открытых ордеров, если они БОЛЕЕ 1... то есть 2 или БОЛЕЕ автоматически! так что это может быть уже покрыто советником... поправьте меня, если я не прав!]

 
deysmacro:
Вау... то, что вы хотите, в принципе, довольно легко закодировать.

Ты смешной. Тонко, но смешно.
 
thrdel:

Ты смешной. Тонко, но смешно.

что если я могу добавить цикл IF, а затем вставить остальную часть кода ниже, который запускает цикл?

Условие IF должно проверить, что OrdersTotal => 2, чтобы управление было передано на закрытие всех открытых ордеров с прибылью X после спреда?

Как указать советнику делать отметки в определенном случае?

Допустим, я делаю следующее

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start() 
{
if (OrdersTotal()=>2)                                     // Can this work? Can a function be directly called like this?
} 
{
 if (AccountProfit()>= My_Money_Profit_Target)
   {
    for(i=OrdersTotal()-1;i>=0;i--)
       {
       OrderSelect(i, SELECT_BY_POS);
       int type   = OrderType();
               
       bool result = false;
              
       switch(type)
Ok, cant seem to get out of this box yet ! hehe need to know forum stuff more ! but, as you can see above, if that "if (OrdersTotal()=>2)" is valid, it would directly solve my problems .. because the rest of
the stuff would be executed only if the total running market orders are 2 ! =D ..  and some forum guru please release this text from this src prison box ! ;)
 
Однако вы должны помнить. Советник закрывает только текущие сделки. Вы должны открыть сделку самостоятельно.
Причина обращения: