[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 227

 
drknn:

增加滑移量。这些交易必须是在一个快速的市场中开立的。在重要的新闻之后,有时会发生这样的情况,欧罗巴克在1-2个点上的速度如此之快,简直就是一场噩梦。而当服务器在处理EA的订单时,价格变化非常突然。


我担心,如果Slippage总是很大,DT可能会开始系统地滥用它。最好是动态地 "移动 "它--只有当服务器上的价格比发送订单时的价格更好时。这将类似于人工竞价--如果要求的价格不再有,那么将提供一个新的价格,可以按确定接受,也可以拒绝--当然,如果是同样的情况。

 

大家好!请帮助我结合以下事情。结果应该是:两条线跟随价格,一条比Ask低20点..,

此外,如果价格每变化1个点,我就会收到提示音。

所有这些都能单独正常工作。提前感谢!

1)在 "问价 "下方的线,20个点。

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask-20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask-20*Point);
return(0);
}

//+------------------------------------------------------------------+

2) 该线在Ask上方20点。

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int start()
{
ObjectCreate("MyPriceLine", OBJ_HLINE, 0, 0, Ask+20*Point) ;
ObjectSet("MyPriceLine", OBJPROP_PRICE1, Ask+20*Point);
return(0);
}

//+------------------------------------------------------------------+

3)价格随时间变化 的速度。

#property show_inputs

extern int pips=2; //изменение аск
extern double Time_=0.1; //c. ~ tick
extern bool все_из_обзора_рынка=true; // только текущий символ - false

int i, l, p, количество_символов;
string val[], на_экран;
int Ask_save[];

//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
void start(){
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
ArrayResize(Ask_save,количество_символов);
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}
if(!все_из_обзора_рынка){
количество_символов=1;
ArrayResize(Ask_save,количество_символов);
ArrayResize(val,количество_символов);
val[0]=Symbol();
}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим

Alert("пересчитаем через "+Time_+" сек.");

for(i=0;i<количество_символов;i++){//посчитаем стоимость спреда для инструментов из обзора рынка
if((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT))>=pips){
Alert(val[i]+","+Period()+" изменился вниз на "+DoubleToStr((Ask_save[i]-MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)),0)+" pips");
PlaySound("timeout.wav");
}
if((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i])>=pips){
Alert(val[i]+","+Period()+" изменился вверх на "+DoubleToStr((MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT)-Ask_save[i]),0)+" pips");
PlaySound("email.wav");
}
Ask_save[i]=MarketInfo(val[i],MODE_ASK)/MarketInfo(val[i],MODE_POINT);
}
Sleep(Time_*1000);//пауза сек.
}

/*
количество_символов=SymbolsList(val, true);//запись в массив val инструменты и их количество вызов функции SymbolsList
if(количество_символов == -1){ Alert("Ошибка открытия файла в SymbolsList(string &Symbols[], bool Selected)"); return;}

while(true&&!IsStopped()){ //если разрешить и не отанавливать скрипт продолжим
на_экран="\r\n"; //отступ
for(i=0;i<количество_символов;i++)//посчитаем стоимость спреда для инструментов из обзора рынка
на_экран=на_экран+val[i]+" стоимость спреда = " + DoubleToStr(MarketInfo(val[i],MODE_SPREAD)*MarketInfo(val[i],MODE_TICKVALUE),0)+"\r\n";
Comment(на_экран);//выведем на экран
Alert("Пересчитаем");//сигнал
Sleep(3000);//пауза 3 сек.
}
*/
}
void deinit(){Comment("");}
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=


//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// функция читает из обзора рынка все фин.инстр.
//+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
int SymbolsList(string &Symbols[], bool Selected){
int Offset, SymbolsNumber; string SymbolsFileName;
if(Selected) SymbolsFileName = "symbols.sel"; else SymbolsFileName = "symbols.raw";
int hFile = FileOpenHistory(SymbolsFileName, FILE_BIN|FILE_READ);
if(hFile < 0) return(-1); if(Selected) { SymbolsNumber = (FileSize(hFile) - 4) / 128; Offset = 116; }
else { SymbolsNumber = FileSize(hFile) / 1936; Offset = 1924; }
ArrayResize(Symbols, SymbolsNumber);
if(Selected) FileSeek(hFile, 4, SEEK_SET);
for(int i = 0; i < SymbolsNumber; i++){Symbols[i] = FileReadString(hFile, 12); FileSeek(hFile, Offset, SEEK_CUR);}
FileClose(hFile);
return(SymbolsNumber);
}
 
Vovo4ka:

比如,一个聪明的石油人想开个玩笑......)

对此我很抱歉,钱是你的。你们的人越多,我们的情况就越好。
 
ScioMe:

MetaEditor有一个标准的iMA指标。请自由使用它 :)
请告诉我在哪里买,放在哪里,我还是个十足的傻瓜......
 
Vovo4ka:
人!我想做的是,这将交易很多,取决于风险....,什么不出来....。

请告知错误在哪里....

在你的交易历史中,你是否只有一个正确类型的订单?

if(OrderProfit()>0) break;

如果有一个订单是盈利收盘的--我们就退出循环,不检查其余的历史记录。

int    orders=HistoryTotal();     // history orders tota l

这是你自己的职能?或者OrdersHistoryTotal()?

我对搜索亏损订单的数量感到困惑。如果你需要最后一个关闭的订单,最后一个订单的支票在哪里?

以下是供你自己分析的功课。

int losses=0;
for (int i=0; i<OrdersHistoryTotal(); i++) {                // Цикл по истории терминала
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {         // Если ордер выбран ...
      if (OrderSymbol()!=Symbol())     continue;            // Если символ ордера не наш -  к следующему ордеру
      if (OrderType()>OP_SELL)         continue;            // Если тип ордера не наш -     к следующему ордеру
      if (OrderMagicNumber()!=Magic)   continue;            // Если магик ордера не наш -   к следующему ордеру
      if (OrderProfit()>=0)            continue;            // Если профит ордера в плюсе - к следующему ордеру
      if (OrderProfit()<0)                                  // Ордер закрыт в минусе ...
         losses++;                                          // Увеличиваем счётчик убыточных ордеров      
      }
   else if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {   // Если не удалось выбрать ордер ...
      Print("Error in history! ", GetLastError());          // Сообщим об ошибке и посмотрим её код
      break;                                                // Прерываем цикл перебора ордеров
      }
   }

这里还有一件事。

if(ldlot<0.1) ldlot=0.1;

能否所有的人都能以低于最低允许值的价格进行检查?

double MinLot=MarketInfo(Symbol(),MODE_MINLOT);
if (ldlot<MinLot) ldlot=MinLot;

同时,它是否大于最大值(当把手数大小传给函数时)?

double MaxLot=MarketInfo(Symbol(),MODE_MAXLOT);
if (ldlot>MaxLot) ldlot=MaxLot;
 
doon:

谢谢,但你还是要在那里放一个滑梯。

我不明白,为什么你需要它在那里?我认为这很简单。
 
ZZZEROXXX:


我担心,如果Slippage总是很高,DC可能会开始系统地滥用它。

如果特区开始滥用它,什么都无济于事。这里还有一件事可能有用。如果您的经纪公司有浮动点差,那么最好把自动检测点差的大小 放在顾问开始的功能中,滑点应该被设置为三个点差。那么滑移将是动态变化的。
 
告诉我,如果我按票据处理订单,如何将一个变量(int Ticket)写成静态局部或通常的全局,或一般来说,写成通常的局部?我很迷惑。谢谢你。
 
Fam:
请告知,如果我们按票据处理订单,如何正确地将变量(int Ticket)写成静态局部变量或普通全局变量,或一般写成普通局部变量?我很迷惑。谢谢你。

这完全取决于这个变量是否会对所有的EA函数可用(嗯......不是全部,但有些是肯定的)。那么这个变量就是全局的。

如果它只在一个函数中使用,那么它就是本地的。

这个问题就像 "把花放在哪种水里,白水还是糖水"......。当你在猜测时,花变成了扫帚,在洗澡时...:))

 
ZZZEROXXX:


我担心,如果Slippage总是很高,DC可能会系统地滥用它。我想动态地 "滑移 "它--只有当服务器上的价格优于发送订单的价格时。这将类似于人工竞价--如果要求的价格不再有,那么将提供一个新的价格,可以按确定接受,也可以拒绝--当然,如果是相同的情况。

尽量使滑点 首先取决于波动率。在一个平静的市场中,它将是最小的,在一个快速的市场中,它将蔓延得更广。