任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1097

 
alvlaf:

你给出的最后一个代码领先一步--它根本没有打开任何交易(所以禁令是有效的)。我还不明白为什么完全没有。所附的是日志的截图。

起初,该变量被称为ProfitableSerie,具有相反的功能。我还有一些东西要补充。

int OnInit()                     // abeiks && LRA: замечания приняты)))
{
   if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
   return(INIT_SUCCEEDED);
}

// OnDeinit больше не нужен

void OnTick()
{
   if (CountTrades() == 0) // Количество ордеров должно равняться нулю
   {
      if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
      // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) 
      // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder(), 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
      {
         if (GlobalVariableGet("AllowNewOrders") > 0) return;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
      }
      GlobalVariableSet("AllowNewOrders", 1);
   }
}

这样试试吧。我有一种感觉,会有别的东西出现......

 
大家好,我开始阅读MQL4教程(我想学习如何编程),但这是一个旧版本,你建议怎么做? 先看教程,再看文档?
 
LRA:
// ИХМО так нагляднее
同意!
 
linar:

你好,我开始阅读MQL4教程(我想学习如何编程),但它是一个旧版本,你建议怎么做?

如果你曾经用C语言编程,最好翻阅免费指标、较简单的指标和专家顾问的源代码,并阅读帮助。

如果你根本没有编程,那么...如果你根本不知道如何编程,那么请阅读文档。)))

在这个论坛上也有一个教程:https://www.mql5.com/ru/forum/108883

 
A13ksandr:

只是一开始,这个变量被称为ProfitableSerie,并且有相反的功能。还有一些东西要补充。

这样试试吧。我有一种感觉,会有别的东西出现......

又向前迈进了一步--机器人开了一笔交易,但这就结束了。其他东西都没有打开,甚至在日志中也没有关于任何尝试的信息......。
 
alvlaf:
又向前迈进了一步--机器人开了一笔交易,但这是它的终点。机器人没有打开其他东西,日志中也没有关于任何尝试的信息...

我只想把部分代码放正确,但后来我复制了整个代码,却没有解决这个错误。在最后的条件下应该是这样的。

         if (GlobalVariableGet("AllowNewOrders") == 0) return;

但实际上他当时不应该做一笔交易。前两个条件中的一些没有正常工作。暂时修复条件,让我们看看 :)

Updateade:为了以防万一,带回了OnDeinit。

void  OnDeInit()
{
   GlobalVariableSet("AllowNewOrders",1); 
} 
 
A13ksandr:

该死的,我原本只想插入一部分正确的代码,但后来我复制了全部内容,没有纠正这个错误。在最后一个条件中应该是这样的

但实际上他当时不应该做一笔交易。前两个条件中的一些没有正常工作。暂时修复条件,让我们看看 :)

Updateade:为了以防万一,带回了OnDeinit。


试了一下,在减去一个交易后,开始在每个tick上开仓
 
alvlaf:
试了一下,在减去一个交易后,开始在每个tick上开仓。

把前两个条件放在第一行

如果(GlobalVariableGet("AllowNewOrders") ==1)返回。

并在一对上尝试第一次测试。

经纪人GrandCapital?

 
A13ksandr:

把前两个条件放在第一行

如果(GlobalVariableGet("AllowNewOrders") ==1)返回。

并在一对上尝试第一次测试。

经纪人GrandCapital?

//----------------------------------------------------------------------
int OnInit()
{
如果(!GlobalVariableCheck("AllowNewOrders"))GlobalVariableSet("AllowNewOrders",1)。
return(INIT_SUCCEED)。
}

//----------------------------------------------------------------------

空白的OnDeInit()。
{
GlobalVariableSet("AllowNewOrders",1)。
}
//----------------------------------------------------------------------

空白的OnTick()
{
如果(GlobalVariableGet("AllowNewOrders") ==1)返回。
{
如果(CountTrades() == 0) // 订单的数量必须等于零
{
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY) )
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// 如果最后一笔交易是亏损的,则开出相同的交易,但手数更大。
{
GlobalVariableSet("AllowNewOrders", 0)。
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
返回。
}
如果(GlobalVariableGet("AllowNewOrders") ==1)返回。
{
如果(PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)。
// 如果上一次交易的利润 等于零,则将开出相同的交易。
{
GlobalVariableSet("AllowNewOrders", 0)。
类型=TypeLastHistOrder()。
如果(Type == OP_BUY) Price = Ask;
如果(类型== OP_SELL)价格=Bid。
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
返回。
}
如果((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL) )
|| CountHistTrades() == 0)//如果最后一笔交易是盈利的,订单就会被打开。
{
如果(GlobalVariableGet("AllowNewOrders") ==0) 返回。
如果(SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)。
如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。
返回。
}
如果(SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(, OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)。
如果(ticket>0)GlobalVariableSet("AllowNewOrders", 0)。
返回。
}
}
}
GlobalVariableSet("AllowNewOrders", 1)。
}
}

}

是的,大资本。你把它放进去了吗?它又停止了开放交易。

 

伙计们,我已经绞尽脑汁了。我如何让EA在高点和低点下挂单,例如8根蜡烛,获利1/4。

我做的事情是这样的。

double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0)。

double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0)。

双TP=((Vhod1-Vhod2)/4)+Vhod1。


我试图改变参数,但一直得到错误的止损,或将价格设定在7.00000;不清楚它来自哪里。