советник - разные вопросы - страница 16

 

Рынок закрыт!

#1 - Я никогда не вызываю объект Button по OnTick(), Start(), так что это нормально?
#2
- Могу ли я применить к объекту Button Object 'ANCHOR_RIGHT_UPPER'?
#3 - Итак, мне все еще нужна помощь по моему вопросу #145, пожалуйста.

Спасибо!

 

#1 - I never call Button Object by OnTick(), Start(), so is it normal?

Да

#2- Могу ли я применить к объекту кнопки 'ANCHOR_RIGHT_UPPER'?

Нет, точка привязки фиксируется на ANCHOR_LEFT_UPPER

#3 - Итак, мне все еще нужна помощь для моей проблемы #145, пожалуйста.

Да, вы правы - EventSetMillisecondTimer(250)

 
honest_knave:

Да
Нет, точка привязки фиксируется на ANCHOR_LEFT_UPPER
Да, вы правы - EventSetMillisecondTimer(250)

Очень признателен. Большое спасибо.
 

#Profit Orders Counting - Open

Я просто пытаюсь получить все прибыльные позиции для расчета в одном значении.
Это дает мне отдельные значения.

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

Надеюсь, я скоро получу хороший ответ.

void profitcalcfnc()
{
    double trueprofit = 0;
    for ( int i = OrdersTotal() - 1; i >= 0; i-- )
    {
        if  ( ! OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) ) continue;
        if  ( closeothers == false && OrderSymbol() != Symbol() ) continue;
        trueprofit = OrderProfit() + OrderSwap() + OrderCommission();
        if  ( trueprofit >= 0 )
        {
            Print( "Profit: ", trueprofit );
            ObjectSetString  ( 0, "all profit counting object", OBJPROP_TEXT, DoubleToString( trueprofit, 2 ) );
        }
    }
    //---
    return;
}

Заранее спасибо.

 
trueprofit = OrderProfit() + OrderSwap() + OrderCommission();

Вы перезаписываете значение trueprofit на каждой итерации цикла, а не добавляете его.

Запомните это:

profit = OrderProfit();

было изменено на это:

profit_buy += OrderProfit();
Вы должны четко определить, что должно происходить на каждой итерации цикла (каждый ордер) и что должно происходить после цикла (после проверки всех ордеров).
 
honest_knave:
Вам нужно четко определиться между тем, что вы хотите, чтобы происходило на каждой итерации цикла (каждый ордер) и тем, что вы хотите, чтобы происходило после цикла (после проверки всех ордеров).

Спасибо за быстрый ответ.
Возможно, я так устала, извините. ( Просто я не могу понять, что ямогу сделать.)

Мне нужно описать немного больше моей проблемы (насколько я могу).
Итак, у меня есть 2 функции:

  1. Первую из них я использую для функции кнопки - при нажатии на которую все прибыльные позиции будут закрываться. Пока работает хорошо. (Я не могу проверить это достаточно - мой брокер отключил торговлю).
  2. Вторую из них я использую для функции Label - она может показать мне все прибыльные значения в одном объекте Label. ( Но я не могу этого сделать )

Наконец, я хотел бы, чтобы эта ( мой последний код комментария) функция подсчета прибыли могла вычислять оба типа ордеров "OP_SELL и OP_BUY" просто прибыльными.

Заранее спасибо.

 

как вы пытаетесь показать все прибыльные значения в одном Label?

Вы имеете в виду все суммированные AcountProfit() или для каждого отдельного OrderProfit().

Если вам нужно что-то вроде этого:


Пожалуйста, посмотрите эту статью:

https://www.mql5.com/en/articles/2723

Graphical Interfaces X: Updates for Easy And Fast Library (Build 3)
Graphical Interfaces X: Updates for Easy And Fast Library (Build 3)
  • 2016.10.17
  • Anatoli Kazharski
  • www.mql5.com
The next version of the Easy And Fast library (version 3) is presented in this article. Fixed certain flaws and added new features. More details further in the article.
 

Спасибо за ваш комментарий.
Извините за путаницу.

Нет, я думаю, что мне нужно немного другое.
Я постараюсь прояснить мой вопрос.

У меня есть 3 позиции по EURUSD. Две из них прибыльные, одна - убыточная. Поэтому мне просто нужно вычислить две из них, которые являются прибыльными.
Например: если каждая из них +1.00 (2 прибыльные позиции = +2.00), то мне просто нужно получить значение всех прибыльных позиций.

Print( "Profit: ", 2.00 ); // absolutely no separately - I just need - could adds profitable values 1.00 + 1.00 = 2.00

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

Всего наилучшего.

Файл изображения вкладки торговой панели

 
double totalprofit=0;

// in your orderselect loop put
if(OrderProfit()>0)
{
  totalprofit=totalprofit+OrderProfit();
}
 

Подсчет ордеров #Profit - закрытые

Marco vd Heijden:
if(OrderProfit()>0)
{
  totalprofit=totalprofit+OrderProfit();
}

Я решил свою проблему после вашего замечательного примера кода.
Отличный человек, большое спасибо!



honest_knave:

Вы перезаписываете значение trueprofit на каждой итерации цикла, а не добавляете к нему.
Запомните это:
Вы должны четко различать, что вы хотите, чтобы происходило на каждой итерации цикла (каждый ордер) и что вы хотите, чтобы происходило после цикла (после того, как вы проверили все ордера).

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

Всего наилучшего каждому из вас, мужчины.

void calc()
{
    double trueprofit  = 0;
    double totalprofit = 0;

    for ( int i = OrdersTotal() - 1; i >= 0; i-- )
    {
        if  ( ! OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) ) continue;
        if  ( closeothers != true && OrderSymbol() != Symbol() ) continue;

        trueprofit = OrderProfit() + OrderSwap() + OrderCommission();
        if  ( trueprofit >= 0 )
        {
            totalprofit += OrderProfit() + OrderSwap() + OrderCommission();
            Print( "Profit: ", DoubleToString( totalprofit, 2 ) );
            ObjectSetString  ( 0, _Checkthisout_name_Label, OBJPROP_TEXT, "Total Profit: " + DoubleToString( totalprofit, 2 ) );
        }
    }
    //---
    return;
}

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

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