externdouble lot=0.1;
externdouble tp=0;
externdouble sl=0;
int Real_Order=-1; // Пока рыночных нетstring Symb=Symbol; // Финанс. инструментint start() // Спец. функция start()
{
OrderSend(Symbol(),OP_BUY,0.1,Ask,0,Bid-sl*Point,Ask+tp*Point);
if(IsDemo()) PlaySound("alert.wav");
for (int i=1; i<=OrdersTotal(); i++) //Цикл по всем ордерам,..
{ //отражённым в терминалеif(OrderSelect(i-1,SELECT_BY_POS)==true)//Если есть следующий
{
//-------------------------------------------------------------- if (OrderSymbol()!= Symb) continue; // Не наш фин.инструм.int Tip=OrderType(); // Тип ордераif (Real_Order>1) continue; //отложник ордер //------------------------------------------------------ 4 --double Price=OrderOpenPrice(); // Цена ордераifNormalizeDouble(tp,sl,Digits) // Выбор самого близкого орд
{
Real_Order=Tip; // Есть рыночный ордерint Ticket=OrderTicket(); // Номер ордераdouble Lot=OrderLots(); // Количество лотов
}
} //Конец анализа ордера
} //Конец перебора орд.//---------------------------------------------------------------------+while(true) // Цикл закрытия орд.
{
if (Real_Order==-1) // Если рыночных нет
{
Alert("По ",Symb," рыночных ордеров нет");
break; // Выход из цикла закр
}
//--------------------------------------------------------- 7 --switch(Real_Order) // По типу ордера
{
case0: double Price_Cls=Bid; // Ордер Buystring Text="Buy "; // Текст для Buybreak; // Из switchcase1: Price_Cls=Ask; // Ордер Sell
Text="Sell "; // Текст для Sell
}
Alert("Попытка закрыть ",Text," ",Ticket,". Ожидание ответа..");
bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Закрытие ордера//--------------------------------------------------------- 8 --if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер ",Text," ",Ticket);
break; // Выход из цикла закр
}
//--------------------------------------------------------- 9 --int Error=GetLastError(); // Не получилось :(switch(Error) // Преодолимые ошибки
{
case135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данныеcontinue; // На след. итерациюcase136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тикаSleep(1); // Задержка в циклеcontinue; // На след. итерациюcase146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решениеRefreshRates(); // Обновим данныеcontinue; // На след. итерацию
}
switch(Error) // Критические ошибки
{
case2 : Alert("Общая ошибка.");
break; // Выход из switchcase5 : Alert("Старая версия клиентского терминала.");
break; // Выход из switchcase64: Alert("Счет заблокирован.");
break; // Выход из switchcase133:Alert("Торговля запрещена");
break; // Выход из switchdefault: Alert("Возникла ошибка ",Error);//Другие варианты
}
break; // Выход из цикла закр
}
return; // Выход из start()
}
你好。傻瓜帮助:我有一个EA,可以 在前一根蜡烛的最小值和最大值上放置挂单 。 朝着蜡烛的方向打开。
的需要。
- 改变开盘方向,即把买入待定改为卖出待定。
-用前一根蜡烛的最小值和最大值来代替前一天的最小值和最大值
- 其他一切保持原样,即删除订单、手数参数、止损、魔法数字。
我的所有行动要么在测试器中导致错误130,要么根本就不能编译。谢谢你的任何建议。
下面是工作代码,没有我的干预。
外置双倍数量 = 0.01;
外置int StopLoss = 0;
外置int TakeProfit = 0;
外置int Magic = 618;
int Up_bars = 0;
int Down_bars = 0;
double StopLoss_new = 0;
double TakeProfit_new = 0;
//+
//|专家初始化函数 |
//+------------------------------------------------------------------+
int init()
{
//----
//
return(0);
}
//+
//|专家去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能 |
//+------------------------------------------------------------------+
int start()
{
//----
for( int cnt=0;cnt<OrdersTotal();cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)>0)
{
if (
( OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
&& OrderMagicNumber() == Magic
&& OrderSymbol() == Symbol()
&& OrderComment() != DoubleToStr(Bars,0)
)
{
Comment("okkk");
OrderDelete(OrderTicket() );
}
}
}
StopLoss_new = StopLoss;
TakeProfit_new = TakeProfit;
if (Up_bars != Bars)
{
if (High[1]-Ask >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(High[1]-StopLoss*Point, Digits);
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(High[1]+TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(High[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000);
RefreshRates() ;
}
else
{
Up_bars = Bars;
}
}
}
StopLoss_new = StopLoss;
TakeProfit_new = TakeProfit;
if (Down_bars != Bars)
{
if (Bid-Low[1] >= MarketInfo(Symbol() , MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(Low[1] +StopLoss*Point, Digits) ;
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(Low[1]-TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_SELLSTOP,Lot, NormalizeDouble(Low[1],Digits),10,StopLoss_new,TakeProfit_new, DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
Sleep(1000);
RefreshRates();
}
else
{
Down_bars = Bars;
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
你好。帮助一个傻子弄清楚这个问题。
显而易见的船长......然而有人给我一个提示。
我给你一个提示--把这种表达方式用语言表达出来。而且你会发现你把它放错了。
PS。
如果对你来说,在哪里寻找错误是如此明显,那为什么还要问?
如果错误130。重新考虑停车和外卖的问题。
请帮助,订单应在从高价到订单开价的4倍距离处关闭。
我哪里搞砸了?
所有的订单都在开盘后3个点内关闭
你是否尝试过计算你的公式的结果?如果没有,那就做吧,因为我得到了一些废话。也许这是因为我不知道所有的条件。
只有一个错误--不知道如何解决。问题出在哪里?
'Symbol' - 预计初始化 C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)
'符号 - 初始化预期 C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)
alex12,指定一些具体的东西,例如
只有一个错误--不知道如何解决。问题出在哪里?
'Symbol' - 预计初始化 C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)
'符号 - 初始化预期 C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)
你有。
你需要这样做。
事实上,你可以双击错误信息,光标会转到指定的(顺便)发生编译错误的位置,即这里。(8, 13)之后,其他错误会被抛出......:)
将上面这行移到start()函数的开头
这是一个开始 - 然后处理其他错误...
大家好。
伙计们,我们需要一些帮助。描述一下情况。
目前的价格是1.4100(例如),我需要找到一个开盘价在1.4090到1.4110之间(从1.4100加减10个点)的酒吧 - 这是好的。
例如,程序已经找到了适合我的开盘价为1.4105的柱子。
然后,程序应该将这个条形图与它左边和右边的条形图进行比较,如果它比较低,就适合。
Artem,这里的诀窍是,下面有一条这样的线。
因此,你建议的方式没有多大意义--如果我正确理解了alex12 的要求。