OrderClose не работает - страница 3

 

Спасибо, Thrdel, я изучу вашу кодировку. Вы действительно так добры. Еще раз спасибо

 
thrdel:


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

Мы пытаемся помочь друг другу здесь, и ваш ответ ничуть не помог, вы не показали ему, как использовать функцию Order Select, и его советник теперь работает не лучше из-за вашего комментария.

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

 
Спасибо всем, кто ответил на мой вопрос. Мое намерение состоит в том, чтобы входить в сделку, когда бар2 удовлетворяет определенным условиям. Я тестирую на GBPJPY и открываю по одной сделке за раз, так как я очень новичок в MQL4. Только с одной сделкой я могу использовать тикет в Orderclose(). Я все еще не знаком с OrderSelect. Таким образом, сделка закроется, если бар3 выполнит определенное условие. Я хотел бы задать вопрос, есть ли способ сохранить выполнение программы в файле для отладки? Поскольку я обнаружил, что когда программа выполняется, я не знаю, какая часть выполнения пошла не так.
 
chuale:
Спасибо всем, кто ответил на мой вопрос. Мое намерение состоит в том, чтобы входить в сделку, когда бар2 удовлетворяет определенным условиям. Я тестирую на GBPJPY и открываю по одной сделке за раз, так как я очень новичок в MQL4. Только с одной сделкой я могу использовать тикет в Orderclose(). Я все еще не знаком с OrderSelect. Таким образом, сделка закроется, если бар3 выполнит определенное условие. Я хотел бы задать вопрос, есть ли способ сохранить выполнение программы в файле для отладки? Поскольку я обнаружил, что когда программа выполняется, я не знаю, какая часть выполнения прошла неправильно.

Не за что, Chuale, я тоже многому научился у других на этом форуме, так что нет проблем. На самом деле вам не нужно сохранять выполнение программы в файл, есть несколько способов следить за значениями переменных и любыми ошибками, которые могут возникнуть. Я использую в основном функцию Comment() и функцию Print(). Я могу прислать примеры, если вам нужно. Как я уже говорил, GBPJPY не дала мне положительных результатов, но USDJPY дала. Я провел обратный тест только в течение месяца (21 января/2014 - 25 февраля/2015), и с моими настройками доходность составила чуть более 400 долларов США. Я протестирую другие пары, как только у меня появится немного времени, и сообщу вам. Также если вам нужна помощь в использовании Print() или Comment() для просмотра значений на экране в реальном времени, дайте мне знать. На ранее прикрепленном изображении - график производительности вашего советника за месяц. Пока что он выглядит не так уж плохо.
 

Уважаемый thedel,

Спасибо

Да, я использую Print(). Мне нужно знать, как использовать OrderSelect(), если есть несколько открытых сделок. Для одной сделки, если я использую SELECT_BY_POS, какое значение должно быть для индекса (OrderSelect (int index, in select, int pool=MODE_TRADES))? Будет ли это 1?

или какое значение?

 
chuale:
Спасибо всем, кто ответил на мой вопрос. Мое намерение состоит в том, чтобы входить в торговлю, когда bar2 удовлетворяет определенным условиям. Я тестирую на GBPJPY и открываю по одной сделке за раз, так как я очень новичок в MQL4. Только с одной сделкой я могу использовать тикет в Orderclose(). Я все еще не знаком с OrderSelect. Таким образом, сделка закроется, если бар3 выполнит определенное условие. Я хотел бы задать вопрос, есть ли способ сохранить выполнение программы в файле для отладки? Поскольку я обнаружил, что когда программа выполняется, я не знаю, какая часть выполнения пошла не так.


Вот пример использования функции Order Select:

В данном примере функция CountTrades проверяет все открытые и отложенные ордера, отбрасывает те, которые не имеют совпадающего символа и магического номера, и считает только те, которые нам нужны.

В этом примере она будет выбирать от самого последнего до первого.

Если вам нужна дополнительная помощь, дайте мне знать.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
/*
On every tick program checks what the value of myTrades is
by calling (executing) the CountTrades() function and asign the value
returned to myTrades..
*/
int myTrades = CountTrades();
/*
Comment() function will display the words in quotes and the value of 
myTrades variable.
*/
Comment("You have "+myTrades+" open trades.");
   
  }
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;// we start counting from zero
int trade;  // define a variable that will hold the total number of trades that are open
// Get the number of trades from OrdersTotal() and asign that value to trade variable.
for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
   OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); // Select orders by position (OP_BUY and OP_SELL) - orders can be selected by position or by ticket
                                                 // select from Open or pending orders = MODE_TRADES or select from History = MODE_HISTORY
   if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)// if the order has a different symbol or magic number, skip to next order
   continue;
   if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)// if symbol is right and magic number is right, that is my order ,then
   if(OrderType()==OP_SELL                                         // if it's an open sell do this.....
   || OrderType()==OP_BUY)                                         // if it's an open buy do this......      
   count++;                                                        // in this example increase the counter since I'm counting all my orders
   }
return(count);                                                     // When finished counting, return the result
}
 
thrdel:


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

Мы пытаемся помочь друг другу здесь, и ваш ответ ничуть не помог, вы не показали ему, как использовать функцию Order Select, и его советник теперь работает не лучше из-за вашего комментария.

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


Если вы пытаетесь помочь, то объясните это правильно

Вы сказали

Трдель:

Сначала вы считаете ордера с помощью OrdersTotal().

total=OrdersTotal();


плохой пример...... вы привели

Если парень не хочет использовать OrderSelect(), то он должен перестать программировать советников.

большая глупость то, что вы говорите здесь, https://www.mql5.com/en/forum/149958/page2#915413

Я закомментировал ваш пример кода и сказал вам, что вы должны сделать.

Есть много примеров, которые я привел, как сделать ...

погуглите, если хотите найти их.

 
thrdel:


Есть несколько вещей, которые вы сделали неправильно. Я предполагаю, что вы хотите, чтобы этот советник работал на парах JPY на таймфрейме M1. Вы хотите размещать ордера только на новом баре и закрывать ордера только на новом баре или вы хотите входить на новом баре и выходить, если условия выполнены? Вот что я думаю:

Сначала вы подсчитываете заказы с помощью функции OrdersTotal().

Затем вычисляете свои переменные

Если в рынке есть ордера, проверьте, должны ли они быть закрыты.

Если ордеров на рынке нет, проверьте, выполнены ли условия входа.

Дайте мне знать, если у вас есть вопросы.

 
когда скомпилировал следующее: написано Time function not define. Пожалуйста, посоветуйте.
if(Time[0]==previousTime) return(0);         //EA will not go past this point unless it is a new bar
   previousTime=Time[0];                        // If it was a new bar , it's old now but continue to the end
 
chuale:
когда скомпилировал следующее: написано Time function not define. Пожалуйста, посоветуйте.


Хорошо, я исправил это, так как я неправильно напечатал скобку для Time, она должна быть [] вместо (). Спасибо
Причина обращения: