На демо альпари функция Marketinfo(Symbol(),MODE_TICKVALUE) выдает НОЛЬ. Тупо проверил скриптом. У divenfx работает нормально. Советник начал глючить из-за этого при переносе в другой терминал. Интересно, в чем тут прикол? Придется взять сторонний скрипт :(
Для ордера buy все работает нормально(код интеджера ). Подскажите пожалуйста как посчитать для ордера sell. Есть небольшое расхождение - как его учесть?
Ваш скрипт сыпется, если между первой и второй валютой в названии символа будет какой-нибудь знак - а так бывает. Нужно использовать поиск подстроки в строке начиная с нужной позиции (0-4 и 3-до конца), чтоб наверняка нашло
Сделал себе скрипт, возвращающий стоимость пункта при заданном лоте (к посту приложен). Вроде работает нормально. Кинул на золото и усомнился. Дело в том, что у меня на счёте золото ходит минимум по 10 пунктов за тик. Вот сижу и думаю, что за результат я получил своим скриптом, введя в параметры минимальный лот = 0,01? Это мне скрипт вернул реальную стоимость 1 пункта (и, как следствие, для золота мне его нужно умножить на 10), или стоимость минимального изменения цены (стоимость 10 пунктов)? Счёт реальный с фиксированным спредом. Не могу открыь пробную сделку, ибо полугодом ранее вывел со счёта все средства.
Вот код скрипта:
//+------------------------------------------------------------------+//| 0.mq4 |//| Copyright 2022, Drknn |//+------------------------------------------------------------------+#property show_inputs
externdouble Lot=0.1;// Лот//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart(){
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); // стоимость пункта при лоте = 1Alert("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);
}
}
Сделал себе скрипт, возвращающий стоимость пункта при заданном лоте (к посту приложен). Вроде работает нормально. Кинул на золото и усомнился. Дело в том, что у меня на счёте золото ходит минимум по 10 пунктов за тик. Вот сижу и думаю, что за результат я получил своим скриптом, введя в параметры минимальный лот = 0,01? Это мне скрипт вернул реальную стоимость 1 пункта (и, как следствие, для золота мне его нужно умножить на 10), или стоимость минимального изменения цены (стоимость 10 пунктов)? Счёт реальный с фиксированным спредом. Не могу открыь пробную сделку, ибо полугодом ранее вывел со счёта все средства.
Вот код скрипта:
помнится что для золота TICK_SIZE TICK_VALUE (барабанная дробь..) надо вбивать руками, а не брать из справочника :-) это исключение
У интеджера правильно. Тиксайз и поинт надо обязательно учитывать, так-как они не обязаны быть равными.
Немного доработал...
Ваш скрипт сыпется, если между первой и второй валютой в названии символа будет какой-нибудь знак - а так бывает. Нужно использовать поиск подстроки в строке начиная с нужной позиции (0-4 и 3-до конца), чтоб наверняка нашло
У меня возник вопрос.
Сделал себе скрипт, возвращающий стоимость пункта при заданном лоте (к посту приложен). Вроде работает нормально. Кинул на золото и усомнился. Дело в том, что у меня на счёте золото ходит минимум по 10 пунктов за тик. Вот сижу и думаю, что за результат я получил своим скриптом, введя в параметры минимальный лот = 0,01? Это мне скрипт вернул реальную стоимость 1 пункта (и, как следствие, для золота мне его нужно умножить на 10), или стоимость минимального изменения цены (стоимость 10 пунктов)? Счёт реальный с фиксированным спредом. Не могу открыь пробную сделку, ибо полугодом ранее вывел со счёта все средства.
Вот код скрипта:
У меня возник вопрос.
Сделал себе скрипт, возвращающий стоимость пункта при заданном лоте (к посту приложен). Вроде работает нормально. Кинул на золото и усомнился. Дело в том, что у меня на счёте золото ходит минимум по 10 пунктов за тик. Вот сижу и думаю, что за результат я получил своим скриптом, введя в параметры минимальный лот = 0,01? Это мне скрипт вернул реальную стоимость 1 пункта (и, как следствие, для золота мне его нужно умножить на 10), или стоимость минимального изменения цены (стоимость 10 пунктов)? Счёт реальный с фиксированным спредом. Не могу открыь пробную сделку, ибо полугодом ранее вывел со счёта все средства.
Вот код скрипта:
помнится что для золота TICK_SIZE TICK_VALUE (барабанная дробь..) надо вбивать руками, а не брать из справочника :-) это исключение
помнится что для золота TICK_SIZE TICK_VALUE (барабанная дробь..) надо вбивать руками, а не брать из справочника :-) это исключение
Чтобы вбивать руками, нужно знать какие цифири вбивать. Отсюда вопрос, где взять цифири?
Далее, есть же инструменты помимо золота. которые ходят не по 1 пункту за тик. Как их стоимость минимального изменения цены рассчитывать?