Чему равна стоимость 1 пункта? - страница 2

 
PapaYozh:
У интеджера правильно. Тиксайз и поинт надо обязательно учитывать, так-как они не обязаны быть равными.
ОК, так и запишем-с ... ;)
 
На демо альпари функция Marketinfo(Symbol(),MODE_TICKVALUE) выдает НОЛЬ. Тупо проверил скриптом. У divenfx работает нормально. Советник начал глючить из-за этого при переносе в другой терминал. Интересно, в чем тут прикол? Придется взять сторонний скрипт :(
 
Для ордера buy все работает нормально(код интеджера ). Подскажите пожалуйста как посчитать для ордера sell. Есть небольшое расхождение - как его учесть?
 
Alex:
Немного доработал...

Ваш скрипт сыпется, если между первой и второй валютой в названии символа будет какой-нибудь знак - а так бывает. Нужно использовать поиск подстроки в строке начиная с нужной позиции (0-4 и 3-до конца), чтоб наверняка нашло

 
Не работает на EurJpy
 

У меня возник вопрос.

Сделал себе скрипт, возвращающий стоимость пункта при заданном лоте (к посту приложен). Вроде работает нормально. Кинул на золото и усомнился. Дело в том, что у меня на счёте золото ходит минимум по 10 пунктов за тик. Вот сижу и думаю, что за результат я получил своим скриптом, введя в параметры минимальный лот = 0,01? Это мне скрипт вернул реальную стоимость 1 пункта (и, как следствие, для золота мне его нужно умножить на 10), или стоимость минимального изменения цены (стоимость 10 пунктов)? Счёт реальный с фиксированным спредом. Не могу открыь пробную сделку, ибо полугодом ранее вывел со счёта все средства.


Вот код скрипта:

//+------------------------------------------------------------------+
//|                                                            0.mq4 |
//|                                            Copyright 2022, Drknn |
//+------------------------------------------------------------------+
#property show_inputs
extern double Lot=0.1;// Лот
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(){
        double SkolkoStoit;
        SkolkoStoit=StoimostPunkta(Lot);
        
        Alert("1 пункт при лоте ",Lot," = ",SkolkoStoit);
        Alert(" ============ Скрипт 0 Стоимость пункта ",Symbol()," =================");
}
//+------------------------------------------------------------------+

// ---------------- StoimostPunkta() ------------------------------------
// функция возвращает стоимость пункта при заданном лоте
// ---------------------------------------------------------
double StoimostPunkta(double in_Lot){
        string  FunctionName="StoimostPunkta()";
        string  SMB=Symbol();
        double  PNT=MarketInfo(SMB,MODE_POINT);
        double  Stoimost1Lota=MarketInfo(SMB,MODE_TICKVALUE); // стоимость пункта при лоте = 1
        Alert("Stoimost1Lota = ",Stoimost1Lota);
        Alert("Торговый инструмент ходит как минимум по ",MarketInfo(Symbol(),MODE_TICKSIZE)/Point," пунктов за тик");
  double        MinLot=MarketInfo(SMB,MODE_MINLOT);
        double  StoimostMinLota,PricePunktaZadannLota;
        int                     KoefDelenija,SkolkoRaz;
        
        if(in_Lot<MinLot){
                Print("Ошибка! Некорректное значение параметра. in_Lot<MinLot");
                Print("==================== ",FunctionName," ====================");
                return(0);
        }
        
        if(MinLot==1 || MinLot==0.1 || MinLot==0.01){
                if(MinLot==1){
                        KoefDelenija=1;
                }
                if(MinLot==0.1){
                        KoefDelenija=10;
                }
                if(MinLot==0.01){
                        KoefDelenija=100;
                }
        }
        else{
                KoefDelenija=(-1000);
        }
        if(KoefDelenija<0){
                Print("Ошибка! Некорректное значение параметра MinLot = ",MinLot);
                Print("==================== ",FunctionName," ====================");
                return(0);
        }
        else{ // иначе коэффициент нормален
                StoimostMinLota=Stoimost1Lota/KoefDelenija;// стоимость пункта при минимальном лоте
        }
        if(StoimostMinLota>0){
                // смотрим сколько раз в нашем лоте умещается минимальный
                SkolkoRaz=in_Lot/MinLot;
                // Теперь вычисляем сколько стоит пункт при заданном лоте
                PricePunktaZadannLota=StoimostMinLota*SkolkoRaz;
                return(PricePunktaZadannLota);
        }
        else{
                Print("Ошибка! Некорректное значение параметра StoimostMinLota = ",StoimostMinLota);
                Print("==================== ",FunctionName," ====================");
                return(-1);
        }
}

 
Vitaly Murlenko #:

У меня возник вопрос.

Сделал себе скрипт, возвращающий стоимость пункта при заданном лоте (к посту приложен). Вроде работает нормально. Кинул на золото и усомнился. Дело в том, что у меня на счёте золото ходит минимум по 10 пунктов за тик. Вот сижу и думаю, что за результат я получил своим скриптом, введя в параметры минимальный лот = 0,01? Это мне скрипт вернул реальную стоимость 1 пункта (и, как следствие, для золота мне его нужно умножить на 10), или стоимость минимального изменения цены (стоимость 10 пунктов)? Счёт реальный с фиксированным спредом. Не могу открыь пробную сделку, ибо полугодом ранее вывел со счёта все средства.


Вот код скрипта:

помнится что для золота TICK_SIZE TICK_VALUE (барабанная дробь..) надо вбивать руками, а не брать из справочника  :-) это исключение

 
Maxim Kuznetsov #:

помнится что для золота TICK_SIZE TICK_VALUE (барабанная дробь..) надо вбивать руками, а не брать из справочника  :-) это исключение

Чтобы вбивать руками, нужно знать какие цифири вбивать. Отсюда вопрос, где взять цифири?

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

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